The JavaTM Tutorial
Previous Page Lesson Contents Next Page

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

О классе ResourceBundle Class

Как класс ResourceBundle соотносится с Locale

Концептуально каждый ResourceBundle является набором соответствующих подклассов, которые разделяют одно и то же базовое имя. Следующий список показывает набор соответствующих подклассов. Базовое имя - ButtonLabel. Символы, следующие за базовым именем показывают код языка, код страны и вариант Locale. Например, ButtonLabel_en_GB соответствует Locale, заданная кодом языка английского (en) и кодом страны Великобритании (GB).
ButtonLabel
ButtonLabel_de
ButtonLabel_en_GB
ButtonLabel_fr_CA_UNIX

Чтобы выбрать определенный ResourceBundle, вызовите метод ResourceBundle.getBundle. Следующий пример выбирает ButtonLabel ResourceBundle для Locale, которая соответствует французскому языку, стране Канаде и платформе UNIX.

Locale currentLocale = new Locale("fr", "CA", "UNIX");
ResourceBundle introLabels =
    ResourceBundle.getBundle("ButtonLabel", currentLocale);

Если класс ResourceBundle для заданной Locale не существует, getBundle пытается найти наиболее соответствующий. Например, если требуемый класс - ButtonLabel_fr_CA_UNIX, а Locale по умолчанию - en_US, getBundle будет искать классы в следующем порядке:

ButtonLabel_fr_CA_UNIX
ButtonLabel_fr_CA
ButtonLabel_fr
ButtonLabel_en_US
ButtonLabel_en
ButtonLabel

Заметьте, что getBundle ищет классы на базе Locale по умолчанию, прежде чет выюирает базовый класс (ButtonLabel). Если getBundle не может найти соответствия в вышеприведенном списке классов, он выбрасывает MissingResourceException. чтобы обойти выбрасывание исключения, вы должны всегда обеспечивать базовый класс без суффиксов.

Подклассы ListResourceBundle и PropertyResourceBundle

Абстрактный класс ResourceBundle имеет два подкласса: PropertyResourceBundle и ListResourceBundle.

A PropertyResourceBundle основывается на файле свойств. Файл свойств - обычный текстовый файл, который содержит переводимый текст. Файлы свойств не являются частью исходного кода Java и они могут содержать значения только для объектов String. Если вам нужно хранить другой тип объектов, используйте вместо него ListResourceBundle. Раздел Поддержка ResourceBundle файлами свойств показывает вам, как использовать PropertyResourceBundle.

Класс ListResourceBundle управляет ресурсами со списком пригодности. Каждый ListResourceBundle поддерживается файлом класса. Вы можете сохранить любой зависящий от локализации объект в ListResourceBundle. Чтобы добавить поддержку дополнительной Locale, вы создаете другой исходный файл и компилируете его в файл класса. Раздел Использование ListResourceBundle содержит пример кода, который может оказаться для вас полезным.

Класс ResourceBundle гибкий. Если вы сначала поместите ваш зависящий от локализации объект String в PropertyResourceBundle, а позже решите использовать вместо него ListResourceBundle, это не нанесет удара по вашему коду. Например, следующий вызов getBundle получит ResourceBundle для определенной Locale, если ButtonLabel поддерживается классом или файлом свойств:

ResourceBundle introLabels =
    ResourceBundle.getBundle("ButtonLabel", currentLocale);

Пары ключ-значение

Объекты ResourceBundle содержат массив пар ключ-значение. Вы задаете ключ, который должен быть String, если вы хотите получить значение из ResourceBundle. Значением является объект, зависящий от локализации. Ключи в следующем примере - строки OkKey и CancelKey:
class ButtonLabel_en extends ListResourceBundle {
    // English version
    public Object[][] getContents() {
	return contents;
    }
    static final Object[][] contents = {
	{"OkKey", "OK"},
	{"CancelKey", "Cancel"},
    };
}

Чтобы получить String OK из ResourceBundle, вы должны задать соответствующий ключ при вызове getString:

String okLabel = ButtonLabel.getString("OkKey");

Файл свойств содержит пары ключ-значение. Ключ находится с левой стороны знака равенства, а значение - с правой. Каждая пара находится в отдельной строке. Значения могут представлять только объекты String. Следующий пример показывает содержимое файла свойств по имени ButtonLabel.properties:

OkKey = OK
CancelKey = Cancel

Previous Page Lesson Contents Next Page

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