GrabDuck

Java 8 локализация — urvanov.ru

:

Цикл статей «Учебник Java 8».

Следующая статья — «».
Предыдущая статья — «Java 8 консоль».

Локализация частично уже рассматривалась в статьях «Java 8 дата и время» и «Java 8 форматирование и парсинг».

В этой статье будет рассмотрена локализация ресурсов приложения: строк, картинок, аудио-файлов и т. д.

Для разделения ресурсов, специфичных для каждого языка, страны или региона, используется класс java.util.ResourceBundle или один из его потомков java.util.ListResourceBundle, java.util.PropertyResourceBundle.

Концептуально каждый java.util.ResourceBundle  — это набор подклассов, которые используют одно и то же базовое имя. Например, пусть ButtonLabel — базовое имя. Символы, которые следуют за базовым именем указывают код языка, код страны и вариант Locale. Например, ButtonLabel_en_GB указывает на английский язык (en) и Великобританию (GB).

Чтобы выбрать подходящий ResourceBundle, вызовите метод ResourceBundle.getBundle. Следующий пример выбирает ButtonLabel  ResourceBundle  для Locale  с французским языком, страной Канада и платформой UNIX:

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

Заметьте, что метод getBundle  ищет классы, основанные на Locale  по умолчанию перед поиском базового класса. Если getBundle  не может найти совпадения в этом списке классов, то он бросает исключение java.util.MissingResourceException. Всегда создавайте базовый класс, чтобы избежать подобного исключения.

Абстрактный класс java.util.ResourceBundle  имеет два дочерних класса: java.util.PropertyResourceBundle  и java.util.ListResourceBundle.

Класс PropertyResourceBundle использует файлы настроек (properties) для хранения текста. Эти файлы не являются частью кода Java и они могут содержать только объекты String.

Класс ListResourceBundle использует список локализованных ресурсов, хранящихся в классах Java.

Класс java.util.ResourceBundle  очень гибкий. Если вы сначала использовали PropertyResourceBundle, чтобы хранить локализованные строки в файлах properties, а позже решили использовать ListResourceBundle, то это не отразится на коде. Например, следующий getBundle  получает ResourceBundle  для Locale  независимо от способа хранения этого ResourceBundle.

Метод getBundle  сначала ищет класс с указанным базовым именем, а затем, если его не находит, ищет файл properties.

Класс ResourceBundle  содержит массив пар ключ-значение. Вы указываете ключ, который должен быть String, когда вам нужно достать значение из ResourceBundle. Пример:

Получение значения:

 

Цикл статей «Учебник Java 8».

Следующая статья — «».
Предыдущая статья — «Java 8 консоль».


Поделиться: