Интернационализация в Java или Java i18n – очень важная функция. Java предоставляет поддержку интернационализации (i18n) через ресурсные пакеты.
Интернационализация в Java
Для обеспечения поддержки различных локалей в вашем приложении необходимо создать файлы свойств для каждой конкретной локали. Имена файлов следуют шаблону имени пакета с кодом языка и кодом страны, например ApplicationMessages_en_US.properties
. Как только файлы свойств для конкретных локалей будут готовы, вам просто нужно будет инициализировать ресурсный пакет с правильной локалью. Java предоставляет два класса java.util.ResourceBundle
и java.util.Locale
, которые используются для этой цели. ResourceBundle читает файл свойств для конкретной локали, и вы можете получить значение для любого ключа, специфичное для этой локали. Это очень полезно для сделать тексты вашего веб-приложения специфичными для локали; вы можете получить информацию о локали из HTTP-запроса и создать динамическую страницу с файлами ресурсных пакетов для этой локали. Вы также можете предоставить пользователю возможность выбора локали и динамически обновлять метки.
Пример Java i18n
Для примера java i18n я создал проект, структура которого похожа на изображение ниже. Вот java-код класса JavaInternationalizationExample.
package com.journaldev.i18n;
import java.util.Locale;
import java.util.ResourceBundle;
public class JavaInternationalizationExample {
public static void main(String[] args) {
//локаль по умолчанию
ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
//Получить ResourceBundle с уже определенной локалью
ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
//Получить ресурсный пакет, когда требуется создать локаль
ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
//давайте выведем некоторые сообщения
printMessages(bundle);
printMessages(bundleFR);
printMessages(bundleSWE);
}
private static void printMessages(ResourceBundle bundle) {
System.out.println(bundle.getString("CountryName"));
System.out.println(bundle.getString("CurrencyCode"));
}
}
Здесь имя пакета – ApplicationMessages
, и у меня есть 2 локально-специфичных ресурсных пакета и один ресурсный пакет по умолчанию. ApplicationMessages.properties
CountryName=USA
CurrencyCode=USD
ApplicationMessages_fr_FR.properties
CountryName=France
CurrencyCode=Euro
ApplicationMessages_sv_SE.properties
CountryName=Sweden
CurrencyCode=Kr
Обратите внимание на использование класса Locale, уже определены некоторые локали, но мы всегда можем создать новую локаль, передавая код языка и код страны в его конструктор. Когда я запускаю программу выше, вот что выводится.
USA
USD
France
Euro
Sweden
Kr
Вот и все для быстрого примера java i18n. Интернационализация в java очень полезна в веб-приложениях для отображения страниц на локально-специфичных языках.
Source:
https://www.digitalocean.com/community/tutorials/java-i18n-internationalization-in-java