|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Концептуально каждый 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 без суффиксов.
Абстрактный 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