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