Spec-Zone .ru
спецификации, руководства, описания, API
След: Интернационализация
Урок: Установка Локали
Создание Локали
Домашняя страница > Интернационализация > Установка Локали

Создание Локали

Есть несколько способов создать a Locale объект. Независимо от используемого метода создание может быть столь же простым как определение кода языка. Однако, можно далее отличить локаль, устанавливая область (также называемый "страной") и различные коды. Если Вы используете JDK 7 выпусков или позже, можно также определить код сценария и расширения локали Unicode.

Эти четыре способа создать a Locale объект:


Примечание версии: Locale.Builder class и forLanguageTag метод был добавлен в Java SE 7 выпусков.

LocaleBuilder Класс

Locale.Builder утилита class может использоваться, чтобы создать a Locale объект, который приспосабливает BCP IETF 47 синтаксисам. Например, чтобы определить французский язык и страну Канады, Вы могли вызвать Locale.Builder конструктор и затем объединяет методы метода set в цепочку следующим образом:

Locale aLocale = new Locale.Builder().setLanguage("fr").setRegion("CA").build();

Следующий пример создает Locale объекты для английского языка в Соединенных Штатах и Великобритании:

Locale bLocale = new Locale.Builder().setLanguage("en").setRegion("US").build();
Locale cLocale = new Locale.Builder().setLanguage("en").setRegion("GB").build();

Заключительный пример создает a Locale объект для русского языка:

Locale dLocale = new Locale.Builder().setLanguage("ru").setScript("Cyrl").build();

Locale Конструкторы

Есть три конструктора, доступные в Locale class для того, чтобы создать a Locale объект:

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

aLocale = new Locale("fr", "CA");
bLocale = new Locale("en", "US");
cLocale = new Locale("en", "GB");
dLocale = new Locale("ru");

Не возможно установить код сценария a Locale объект в выпуске ранее чем JDK 7.

forLanguageTag Метод фабрики

Если у Вас есть строка тега языка, которая приспосабливает BCP IETF 47 стандартам, можно использовать forLanguageTag(String) метод фабрики, который был представлен в Java SE 7 выпусков. Например:

Locale aLocale = Locale.forLanguageTag("en-US");
Locale bLocale = Locale.forLanguageTag("ja-JP-u-ca-japanese");

Locale Константы

Для Вашего удобства Locale class обеспечивает константы для некоторых языков и стран. Например:

cLocale = Locale.JAPAN;
dLocale = Locale.CANADA_FRENCH;

Когда Вы определяете постоянный язык, часть области Locale неопределено. Следующие три оператора создают эквивалентный Locale объекты:

j1Locale = Locale.JAPANESE;
j2Locale = new Locale.Builder().setLanguage("ja").build();
j3Locale = new Locale("ja");

Locale объекты, создаваемые следующими тремя операторами, также эквивалентны:

j4Locale = Locale.JAPAN;
j5Locale = new Locale.Builder().setLanguage("ja").setRegion("JP").build();
j6Locale = new Locale("ja", "JP");

Коды

Следующие разделы обсуждают код языка и дополнительный сценарий, область, и различные коды.

Код языка

Код языка является или двумя или тремя строчными буквами, которые соответствуют стандарту ISO 639. Можно найти полный список кодов ISO 639 в http://www.loc.gov/standards/iso639-2/php/code_list.php.

Следующая таблица приводит несколько из кодов языка.

Демонстрационные Коды Языка
Код языка Описание
de Немецкий язык
en Английский язык
fr Французский язык
ru Русский язык
ja Японский язык
jv Яванский язык
ko Корейский язык
zh Китайский язык

Код сценария

Код сценария начинается с прописной буквы, сопровождаемой тремя строчными буквами, и соответствует стандарту ISO 15924. Можно найти полный список кодов ISO 15924 в http://unicode.org/iso15924/iso15924-codes.html.

Следующая таблица приводит несколько из кодов сценария.

Демонстрационные Коды Сценария
Код сценария Описание
Arab Арабский язык
Cyrl Кириллица
Kana Katakana
Latn Латынь

Есть три метода для того, чтобы получить информацию о сценарии для a Locale:

Код области

Область (страна), код состоит из или двух или трех прописных букв, которые соответствуют стандарту ISO 3166, или трем числам, которые приспосабливают ООН М. 49 стандарта. Копия кодов может быть найдена в http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html.

Следующая таблица содержит несколько демонстрационных стран и кодов области.

Демонстрационные Коды Области
Код A-2 Код A-3 Числовой Код Описание
AU AUS 036 Австралия
BR BRA 076 Бразилия
CA CAN 124 Канада
CN CHN 156 Китай
DE DEU 276 Германия
FR FRA 250 Франция
IN IND 356 Индия
RU RUS 643 Российская Федерация
US USA 840 Соединенные Штаты

Различный Код

Дополнительное variant код может использоваться, чтобы далее отличить Ваш Locale. Например, различный код может использоваться, чтобы указать на диалектические различия, которые не покрываются кодом области.


Примечание версии: До Java SE 7 выпусков различный код иногда использовался, чтобы идентифицировать различия, которые не были определенными для языка или области. Например, это, возможно, использовалось, чтобы идентифицировать различия между вычислительными платформами, такими как Windows или UNIX. Под BCP IETF 47 стандартов обескураживают этому использованию.

Чтобы определить не язык определенные изменения, относящиеся к Вашей среде, используйте механизм расширений, как объяснено в BCP 47 Расширений.

С Java SE 7 выпусков, которые приспосабливают BCP IETF 47 стандартам, различный код, используются определенно, чтобы указать на дополнительные изменения, которые определяют язык или его диалекты. BCP IETF 47 стандартов вводит синтаксические ограничения для различного подтега. Можно видеть список различных кодов (поиск разновидности) в http://www.iana.org/assignments/language-subtag-registry.

Например, Java SE использует различный код, чтобы поддерживать тайский язык. Условно, a NumberFormat объект для th и th_TH локали будут использовать общие арабские формы цифры, или Арабские цифры, чтобы отформатировать тайские числа. Однако, a NumberFormat для th_TH_TH локаль использует тайские формы цифры. Выборка от ThaiDigits.java демонстрирует это:

String outputString = new String();
Locale[] thaiLocale = {
             new Locale("th"),
             new Locale("th", "TH"),
             new Locale("th", "TH", "TH")
         };

for (Locale locale : thaiLocale) {
    NumberFormat nf = NumberFormat.getNumberInstance(locale);
    outputString = outputString + locale.toString() + ": ";
    outputString = outputString + nf.format(573.34) + "\n";
}

Следующее является снимком экрана этой выборки:

Снимок экрана Демонстрационного ThaiDigits.java

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Установка Локали
Следующая страница: BCP 47 Расширений