|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел ступает через названный пример программы .PropertiesDemo
Файл свойств является простым текстовым файлом. Можно создать и поддержать файл свойств с примерно любым текстовым редактором.
Следует всегда создавать файл свойств значения по умолчанию. Имя этого файла начинается с базового имени Вашего ResourceBundle и концы с .properties суффикс. В PropertiesDemo программа базовое имя LabelsBundle. Поэтому файл свойств значения по умолчанию вызывают LabelsBundle.properties. Этот файл содержит следующие строки:
# This is the default LabelsBundle.properties file s1 = computer s2 = disk s3 = monitor s4 = keyboard
Отметьте, что в предыдущем файле строки комментария начинаются со знака фунта (#). Другие строки содержат пары ключ/значение. Ключ находится на левой стороне знака "равно", и значение справа. Например, s2 ключ, который соответствует значению disk. Ключ произволен. Мы, возможно, вызвали s2 что-то еще, как msg5 или diskID. После того, как определенный, однако, ключ не должен измениться, потому что на него ссылаются в исходном коде. Значения могут быть изменены. Фактически, когда Ваши localizers создают новые файлы свойств, чтобы разместить дополнительные языки, они преобразуют значения на различные языки.
Поддерживать дополнительное Locale, Ваш localizers создаст новый файл свойств, который содержит преобразованные значения. Никакие изменения к Вашему исходному коду не требуются, потому что Ваша программа ссылается на ключи, не значения.
Например, чтобы добавить поддержку немецкого языка, Ваш localizers преобразовал бы значения в LabelsBundle.properties и разместите их в названный файл LabelsBundle_de.properties. Заметьте, что имя этого файла, как этот файла значения по умолчанию, начинается с базового имени LabelsBundle и концы с .properties суффикс. Однако, так как этот файл предназначается для определенного Locale, базовое имя сопровождается кодом языка (de). Содержание LabelsBundle_de.properties следующие:
# This is the LabelsBundle_de.properties file s1 = Computer s2 = Platte s3 = Monitor s4 = Tastatur
PropertiesDemo пример программы поставляет с тремя файлами свойств:
LabelsBundle.properties LabelsBundle_de.properties LabelsBundle_fr.properties
PropertiesDemo программа создает Locale объекты следующим образом:
Locale[] supportedLocales = {
Locale.FRENCH,
Locale.GERMAN,
Locale.ENGLISH
};
Они Locale объекты должны соответствовать файлы свойств, создаваемые в предыдущих двух шагах. Например, Locale.FRENCH объект соответствует LabelsBundle_fr.properties файл. Locale.ENGLISH не имеет никакого соответствия LabelsBundle_en.properties файл, таким образом, файл значения по умолчанию будет использоваться.
Этот шаг показывает как Locale, файлы свойств, и ResourceBundle связываются. Создать ResourceBundle, вызовите getBundleметод, определяя базовое имя и Locale:
ResourceBundle labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
getBundle метод сначала ищет файл class, который соответствует базовое имя и Locale. Если это не может найти файл class, это тогда проверяет на файлы свойств. В PropertiesDemo программа мы отступаем ResourceBundle с файлами свойств вместо файлов class. Когда getBundle метод определяет местоположение корректного файла свойств, он возвращает a PropertyResourceBundle объект, содержащий пары ключ/значение от файла свойств.
Получать преобразованное значение от ResourceBundle, вызовите getString метод следующим образом:
String value = labels.getString(key);
String возвращенный getString соответствует определенному ключу. String находится на надлежащем языке, при условии, что файл свойств существует для указанного Locale.
Этот шаг является дополнительным. Отлаживая Вашу программу, Вы могли бы хотеть выбрать значения для всех ключей a ResourceBundle. getKeys метод возвращается Enumeration из всех ключей a ResourceBundle. Можно выполнить итерации через Enumeration и выберите каждое значение с getString метод. Следующие строки кода, которые являются от PropertiesDemo программа, покажите, как это делается:
ResourceBundle labels = ResourceBundle.getBundle("LabelsBundle", currentLocale);
Enumeration bundleKeys = labels.getKeys();
while (bundleKeys.hasMoreElements()) {
String key = (String)bundleKeys.nextElement();
String value = labels.getString(key);
System.out.println("key = " + key + ", " + "value = " + value);
}
Выполнение PropertiesDemo программа генерирует следующий вывод. Первые три строки показывают значения, возвращенные getString для различного Locale объекты. Программа выводит на экран последние четыре строки, выполняя итерации через ключи с getKeys метод.
Locale = fr, key = s2, value = Disque dur Locale = de, key = s2, value = Platte Locale = en, key = s2, value = disk key = s4, value = Clavier key = s3, value = Moniteur key = s2, value = Disque dur key = s1, value = Ordinateur