Spec-Zone .ru
спецификации, руководства, описания, API
След: Интернационализация
Урок: Изоляция Специфичных для локали Данных
О Классе ResourceBundle
Домашняя страница > Интернационализация > Изоляция Специфичных для локали Данных

О Классе ResourceBundle

Как ResourceBundle Связывается с Локалью

Концептуально каждый ResourceBundle ряд связанных подклассов, которые совместно используют то же самое базовое имя. Список, который следует за шоу ряд связанных подклассов. ButtonLabel базовое имя. Символы после базового имени указывают на код языка, код страны, и разновидность a 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);

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

ButtonLabel_fr_CA_UNIX
ButtonLabel_fr_CA
ButtonLabel_fr
ButtonLabel_en_US
ButtonLabel_en
ButtonLabel

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

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

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

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

ListResourceBundle class управляет ресурсами с удобным списком. Каждый ListResourceBundle поддерживается файлом class. Можно хранить любой специфичный для локали объект в a ListResourceBundle. Добавить поддержку дополнительного Locale, Вы создаете другой исходный файл и компилируете его в файл class. У раздела Используя Пакет ListResource есть пример кодирования, который можно счесть полезным.

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

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

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

ResourceBundle объекты содержат массив пар ключ/значение. Вы определяете ключ, который должен быть a String, когда Вы хотите получить значение от ResourceBundle. Значение является специфичным для локали объектом. Ключи в следующем примере OkKey и CancelKey строки:

class ButtonLabel_en extends ListResourceBundle {
    // English version
    public Object[][] getContents() {
        return contents;
    }
    static final Object[][] contents = {
        {"OkKey", "OK"},
        {"CancelKey", "Cancel"},
    };
}

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

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

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

OkKey = OK
CancelKey = Cancel

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Изоляция Специфичных для локали Данных
Следующая страница: Подготовка Использовать ResourceBundle