|
|
Концептуально каждыйResourceBundleявляется набором соответствующих подклассов, которые разделяют одно и то же базовое имя. Следующий список показывает набор соответствующих подклассов. Базовое имя -ButtonLabel. Символы, следующие за базовым именем показывают код языка, код страны и вариантLocale. Например,ButtonLabel_en_GBсоответствуетLocale, заданная кодом языка английского (en) и кодом страны Великобритании (GB).ButtonLabel ButtonLabel_de ButtonLabel_en_GB ButtonLabel_fr_CA_UNIXЧтобы выбрать определенный
ResourceBundle, вызовите методResourceBundle.getBundle. Следующий пример выбираетButtonLabelResourceBundleдля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. чтобы обойти выбрасывание исключения, вы должны всегда обеспечивать базовый класс без суффиксов.
Абстрактный класс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"}, }; }Чтобы получить
StringOKизResourceBundle, вы должны задать соответствующий ключ при вызовеgetString:String okLabel = ButtonLabel.getString("OkKey");Файл свойств содержит пары ключ-значение. Ключ находится с левой стороны знака равенства, а значение - с правой. Каждая пара находится в отдельной строке. Значения могут представлять только объекты
String. Следующий пример показывает содержимое файла свойств по имениButtonLabel.properties:OkKey = OK CancelKey = Cancel
|
|
Copyright 1995-2002 Sun Microsystems, Inc. All rights reserved.