Spec-Zone .ru
спецификации, руководства, описания, API
|
Ранее в этом уроке Вы изучили, как создать и получить доступ к объектам ResourceBundle
class. Эти степени раздела, которые объясняет Ваше знание и, как воспользоваться преимуществом от ResourceBundle.Control
Возможности class.
ResourceBundle.Control
создавался, чтобы определить, как определить местоположение и инстанцировать пакетов ресурса. Это определяет ряд методов обратного вызова, которые вызываются ResourceBundle.getBundle
В отличие от a ResourceBundle.getBundle
ResourceBundle.getBundle
метод определяет пакет ресурса, используя указанное базовое имя, локаль значения по умолчанию и указанное управление.
public static final ResourceBundle getBundle( String baseName, ResourceBundle.Control cont // ...
Указанное управление предоставляет информацию для процесса загрузки пакета ресурса.
Следующий пример программы вызывают RBControl.java
иллюстрирует, как определить Ваши собственные пути поиска для китайских локалей.
properties
Файлы.Как это было описано прежде, чем можно будет загрузить свои ресурсы или из классов или из properties
файлы. Эти файлы содержат описания для следующих локалей:
RBControl.properties
– Глобальная переменная
RBControl_zh.properties
– Язык только: Упрощенный китайский
RBControl_zh_cn.properties
– Область только: Китай
RBControl_zh_hk.properties
– Область только: Гонконг
RBControl_zh_tw.properties
– ТайваньВ этом примере приложение создает новую локаль для Гонконгской области.
ResourceBundle
экземпляр.Как в примере в предыдущем разделе, это приложение создает a ResourceBundle
экземпляр, вызывая getBundle
метод:
private static void test(Locale locale) { ResourceBundle rb = ResourceBundle.getBundle( "RBControl", locale, new ResourceBundle.Control() { // ... } );
getBundle
метод ищет properties
файлы с префиксом RBControl. Однако, этот метод содержит a Control
параметр, который управляет процессом поиска локалей Chineese.
getCandidateLocales
метод getCandidateLocales
метод возвращает список Locales
объекты как локали кандидата для базового имени и локаль.
new ResourceBundle.Control() { @Override public List<Locale> getCandidateLocales( String baseName, Locale locale) { // ... } }
Реализация по умолчанию возвращает список Locale
объекты следующим образом: Локаль (язык, страна).
Однако, этот метод является overriden, чтобы реализовать следующее определенное поведение:
if (baseName == null) throw new NullPointerException(); if (locale.equals(new Locale("zh", "HK"))) { return Arrays.asList( locale, Locale.TAIWAN, // no Locale.CHINESE here Locale.ROOT); } else if (locale.equals(Locale.TAIWAN)) { return Arrays.asList( locale, // no Locale.CHINESE here Locale.ROOT); }
Отметьте, что последний элемент последовательности локалей кандидата должен быть корневой локалью.
test
classВызовите test
class для следующих четырех различных локалей:
public static void main(String[] args) { test(Locale.CHINA); test(new Locale("zh", "HK")); test(Locale.TAIWAN); test(Locale.CANADA); }
Вы будете видеть вывод программы следующим образом:
locale: zh_CN region: China language: Simplified Chinese locale: zh_HK region: Hong Kong language: Traditional Chinese locale: zh_TW region: Taiwan language: Traditional Chinese locale: en_CA region: global language: English
Отметьте, что недавно создаваемый был присвоен Гонконгская область, потому что она была определена в соответствующем properties
файл. Традиционный китайский был присвоен как язык для Тайваньской локали.
Два других интересных метода ResourceBundle.Control
class не использовался в RBControl
пример, но они имели право быть упомянутыми. getTimeToLive
метод используется, чтобы определить, сколько времени пакет ресурса может существовать в кэше. Если ограничение по времени для пакета ресурса в кэше истекло, needsReload
метод вызывается, чтобы определить, должен ли пакет ресурса быть перезагружен.