Автор оригинала: Pankaj Kumar.
Интернационализация в Java или Java i18n является очень важной функцией. Java обеспечивает поддержку интернационализации (i18n) с помощью пакетов ресурсов.
Интернационализация на Java
Чтобы ваше приложение поддерживало разные языки, нам необходимо создать файл свойств, специфичный для конкретного языка. Имена файлов соответствуют шаблону имени пакета с кодом языка и кодом страны, например Application Messages_en_US.properties
.
Как только файлы свойств для определенных языков будут готовы, все, что вам нужно сделать, это инициализировать пакет ресурсов с правильной локализацией. Java предоставляет два класса java.util.ResourceBundle
и java.util.Язык
, которые используются для этой цели. ResourceBundle считывает файл свойств, специфичных для языкового стандарта, и вы можете получить значение, специфичное для языкового стандарта, для любого ключа.
Это очень полезно для определения языкового стандарта текстов веб-приложений.Вы можете получить информацию о языковом стандарте из HTTP-запроса и создать динамическую страницу с файлами пакета ресурсов этого языкового стандарта. Вы также можете предоставить пользователю возможность выбрать языковой стандарт и динамически обновлять метки.
Пример Java i18n
Для примера java i18n я создал проект, структура которого похожа на изображение ниже.
Вот код java для Примера интернационализации Java класса.
package com.journaldev.i18n; import java.util.Locale; import java.util.ResourceBundle; public class JavaInternationalizationExample { public static void main(String[] args) { //default locale ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages"); //Get ResourceBundle with Locale that are already defined ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE); //Get resource bundle when Locale needs to be created ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE")); //lets print some messages printMessages(bundle); printMessages(bundleFR); printMessages(bundleSWE); } private static void printMessages(ResourceBundle bundle) { System.out.println(bundle.getString("CountryName")); System.out.println(bundle.getString("CurrencyCode")); } }
Здесь имя пакета Сообщения приложения
, и у меня есть 2 пакета ресурсов, специфичных для конкретной локали, и один пакет ресурсов по умолчанию.
Здесь имя пакета || Сообщения приложения||, и у меня есть 2 пакета ресурсов, специфичных для конкретной локали, и один пакет ресурсов по умолчанию.
CountryName=USA CurrencyCode=USD
Здесь имя пакета || Сообщения приложения||, и у меня есть 2 пакета ресурсов, специфичных для конкретной локали, и один пакет ресурсов по умолчанию.
CountryName=France CurrencyCode=Euro
Здесь имя пакета || Сообщения приложения||, и у меня есть 2 пакета ресурсов, специфичных для конкретной локали, и один пакет ресурсов по умолчанию.
CountryName=Sweden CurrencyCode=Kr
Обратите внимание на использование класса Locale, некоторые локали уже определены, но мы всегда можем создать новый язык, передав код языка и код страны в его конструктор.
Когда я запускаю вышеприведенную программу, вот результат.
USA USD France Euro Sweden Kr
Это все для быстрого примера java i18n. Интернационализация на java очень полезна в веб-приложениях для обслуживания страниц на языке, определяемом языковым стандартом.