Resource Bundle



Поддержка JavaScript отключена

SBP-Program
На главную -> Java EE 5 &nbsp

&nbsp

Узел ресурсов содержит наборы данных, связанных внутри набора по локальному признаку. Если надо сохранять строковые объекты, то можно использовать файлы свойств (PropertyResourceBundle), которые являются просто текстовыми файлами. Если надо сохра­нять любые объекты, а не только строки, то лучше использовать класс ListResourceBundle. Таким образом, для хранения ресурсов можно использовать текстовые файлы свойств или классы.

Узел содержит данные в виде пар ключ-значение, хранящихся в массиве. Ключ – это обязательно строка. Каждая пара начинается с новой строки. Данные статичны, они не меня­ются при работе программы. В качестве данных не используют даты, числа, т.к. эти данные сами по себе не зависят от локали. От локали зависят их представления, а представления определяются соответствующим форматированием.

Файл свойств использует расширение .properties. Коментарии в нем должны начинать­ся со знака фунта #. Каждое свойство – ключ = значение — записывается на отдельной строке:

klyuch = city

Ключ может быть любой строкой, однако, после определения, его не следует менять, т.к. на него есть ссылки из программы. Значение можно менять по мере необходимости.

Узел ресурсов для другого языка содержит те же ключи, но свои значения. Название файла для этого нового узла составляется из базовго, плюс указание на локаль, плюс .properties. Например, если базовый файл называется «BaseBundle.properties», то для русской локали получаем: «BaseBundle_ru.properties». Если для какой-то локали нет соответствующе­го файла свойств, то используется файл базовый, в нашем случае «BaseBundle.properties».

В коде ссылка на файл свойств получается так:

ResourceBundle ru_res = ResourceBundle.getBundle(»BaseBundle», myLocal);

Сначала метод «getBundle» пытается найти класс для данной локали, если класс не найден, то ищется файл свойств. Получив ссылку на файл, можно извлекать нужные данные методом «getString»:

String myCity = ru_res.getString(»klyuch»);

Если в качестве узла ресурсов использовать класс типа «ListResourceBundle», то в коде надо создать его экземпляр для каждой используемой локали. Соответственно должны существовать и классы для этих локалей. Названия классов составляются из имени базового класса, обозначения языка и страны, например:

BaseBundle_ru_RU.class

Внутри класса должен быть закрытый (либо «static final») двумерный массив «Object[][] contents» и открытый метод доступа к этому массиву. Локали создаются так:

Locale myLocal = new Locale(»ru», »RU»);

Экземпляр класса создается как и ссылка на файл свойств:

ResourceBundle ru_res = ResourceBundle.getBundle(»BaseBundle», myLocal);

После получения объекта класса можно извлекать данные методом «getObject»:

String myCity = (String )ru_res.getObject(»klyuch»);

Программирование

&nbsp
&nbsp
&nbsp