The JavaTM Tutorial
Previous Page Lesson Contents Next Page

Урок: Выделение данных, зависящих от локализации

Поддержка ResourceBundle файлами свойств

Этот раздел проходит по шагам через программный пример, названный PropertiesDemo

1. Создание файла свойств по умолчанию

Файл свойств - обычный текстовый файл. Вы можете создавать и поддерживать файл свойств при помощи люього текстового редактора.

Вы всегда должны создавать файл свойств по умолчанию. Имя этого файла начинается с базового имени вашего 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. Однако, однажды определенный ключ не должен меняться, потому что на него есть ссылки в исходном коде. Значения могут меняться. Фактически, когда ваши сотрудники, занимающиеся локализацией, создают новые файлы свойств для подключения новых языков, они будут переводить значения на разные языки.

2. Создание при необходимости дополнительных файлов свойств

Для поддержки дополнительных Locale ваши сотрудники, занимающиеся локализацией, будут создавать новые файлы свойств, которые содержат переведенные значения. Не требуется никаких изменений в вашем исходном коде, потому что ваша программа ссылается на ключи, а не на значения.

Например, для добавления поддержки немецкого языка ваши локализаторы должны перевести значения в 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

3. Задание локализации

Программа PropertiesDemo создает объекты Locale так:
Locale[] supportedLocales = {
    Locale.FRENCH,
    Locale.GERMAN,
    Locale.ENGLISH
};
Эти объекты Locale должны соответствовать файлам свойств, созданным на двух предыдущих шагах. Например, объект Locale.FRENCH соответствует файлу LabelsBundle_fr.properties. Locale.ENGLISH не соответствует файлу LabelsBundle_en.properties, так что будет использован файл по умолчанию.

4. Создание ResourceBundle

Этот шаг показывает как соотносятся Locale, файлы свойств и ResourceBundle. Чтобы создать ResourceBundle, вызовите метод getBundle, задав базовое имя и Locale:
ResourceBundle labels =
    ResourceBundle.getBundle("LabelsBundle", currentLocale);

Метод getBundle сначала ищет класс, который соответствует базовому имени и Locale. Если он не может найти файл класса, он проверяет файлы свойств. В программе PropertiesDemo мы поддерживаем ResourceBundle файлами свойств, а не файлами классов. Когда метод getBundle неходит правильный файл свойств, он возвращает объект PropertyResourceBundle, содержащий пары ключ-значение из файла свойств.

5. Выборка локализованного текста

Чтобы выбрать переведенное значение из ResourceBundle, вызовите метод getString следующим образом:
String value = labels.getString(key);

String, возвращаемая getString соответствует заданному ключу. String представлена на определенном языке, обеспечивается файлом свойств, существующим для заданной Locale.

6. Повторение для всех ключей

Этот шаг не обязателен. При отладке вашей программы вы можете захотеть выбрать значения для всех ключей в ResourceBundle. Метод getKeys возвращает Enumeration для всех ключей в 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);
}

7. Выполнение программы-примера

Выполнение программы 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

Previous Page Lesson Contents Next Page

Copyright 1995-2002 Sun Microsystems, Inc. All rights reserved.