Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Интернационализация приложения






Класс java.util.Locale позволяет учесть особенности региональных представлений алфавита, символов, чисел, дат и проч. Автоматически виртуальная машина использует текущие региональные установки операционной системы, но при необходимости их можно изменять. Для некоторых стран региональные параметры устанавливаются с помощью констант, например: Locale.US, Locale.FRANCE. Для всех остальных объект Locale нужно создавать с помощью конструктора, например:

Locale rus = new Locale(" ru", " RU");

Определить текущий вариант региональных параметров можно следующим образом:

Locale current = Locale.getDefault();

А можно и изменить для текущего экземпляра (instance) JVM:

Locale.setDefault(Locale.CANADA);

Если, например, в ОС установлен регион «Беларусь» или в приложении с помощью new Locale(" be", " BY"), то следующий код (при выводе результатов выполнения на консоль)

current.getCountry(); // код региона

current.getDisplayCountry(); // название региона

current.getLanguage(); // код языка региона

current.getDisplayLanguage(); // название языка региона

позволяет получить информацию о регионе в виде:

BY

Беларусь

be

белорусский

Для создания приложений, поддерживающих несколько языков, существует целый ряд решений. Самое логичное из них — дублирование сообщений на разных языках в разных файлах с эквивалентными ключами с последующим извлечением информации на основе значения заданной локали. Данное решение основано на взаимодействии классов java.util.ResourceBundle и Locale. Класс ResourceBundle предназначен для взаимодействия с текстовыми файлами свойств (расширение.properties). Каждый объект ResourceBundle представляет собой набор соответствующих подтипов, которые разделяют одно и то же базовое имя, к которому можно получить доступ через поле parent. Следующий список показывает возможный набор соответствующих ресурсов с базовым именем text. Символы, следующие за базовым именем, показывают код языка, код страны и тип операционной системы. Например, файл text_it_CH.properties соответствует объекту Locale, заданному кодом итальянского языка (it) и кодом страны Швейцарии (CH).

text.properties

text_ru_RU.properties

text_it_CH.properties

text_fr_CA.properties

Чтобы выбрать определенный объект ResourceBundle, следует вызвать один из статических перегруженных методов getBundle(параметры).

Следующий фрагмент выбирает text объекта ResourceBundle для объекта Locale, который соответствует французскому языку и стране Канада.

Locale locale = new Locale(" fr", " CA");

ResourceBundle rb = ResourceBundle.getBundle(" text", locale);

Если объект ResourceBundle для заданного объекта Locale не существует, то метод getBundle() извлечет наиболее общий. Если общее определение файла ресурсов не задано, то метод getBundle() генерирует исключительную ситуацию MissingResourceException. Чтобы это не произошло, необходимо обеспечить наличие базового файла ресурсов без суффиксов, а именно: text.properties в дополнение к частным случаям вида:

text_en_US.properties

text_ru_RU.properties

В файлах свойств информация должна быть организована по принципу:

#Комментарий

group1.key1 = value1

group1.key2 = value2

group2.key1 = value3…

Например:

label.button = submit

label.field = login

message.welcome = Welcome!

или

label.button = принять

label.field = логин

message.welcome = Добро пожаловать!

В классе ResourceBundle определен ряд полезных методов, в том числе метод getKeys(), возвращающий объект Enumeration, который применяется для последовательного обращения к элементам. Множество Set< String> всех ключей — методом keySet(). Конкретное значение по конкретному ключу извлекается методом getString(String key). Отсутствие запрашиваемого ключа приводит к генерации исключения. Проверить наличие ключа в файле можно методом boolean containsKey(String key). Методы getObject(String key) и getStringArray(String key) извлекают соответственно объект и массив строк по передаваемому ключу.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал