Интернационализация. Региональные стандарты.
Приложение, которое адаптировано для международного рынка, легко определить по возможности выбора языка, для работы с ним. Но профессионально адаптированные приложения могут иметь разные региональные настройки даже для тех стран, в которых используется одинаковый язык. В любом случае команды меню, надписи на кнопках и программные сообщения должны быть переведены на местный язык, возможно с использованием специального национального алфавита. Но существует еще много других более тонких различий, которые касаются форматов представления вещественных чисел (разделители целой и дробной частей, разделителей групп тысяч) и денежных сумм (включение и местоположения денежного знака), а также формата даты (порядок следования и символы разделители дней, месяцев и лет). Существует ряд классов, которые выполняют форматирование, принимая во внимание указанные выше различия. Для управления форматированием используется класс Locale.Региональный стандарт (locale) определяет язык; кроме того могут быть указаны географическое расположение и вариант языка. Например, в США используется следующий региональный стандарт: language=English, location=United States В Германии региональный стандарт имеет другой вид : language=German, location=Germany В Швейцарии используются четыре официальных языка : немецкий, французский, итальянский и ретороманский. Поэтому немецкие пользователи в Швейцарии, вероятно, захотят использовать следующий региональный стандарт: language=German, location=Switzerland В данном случае текст, даты и числа будут форматироваться так же, как и для Германии, но денежные суммы будут отображаться в швейцарских франках, а не в немецких марках. Если задавать только язык, например language=German, то особенности конкретной страны (например, формат представления денежных единиц) не будут учтены.
Вариант языка используется довольно редко. Например, в настоящее время в норвежском языке (производном от датского) определены два набора правил правописания (Bokmel) и новый (Nynorsk). В этом случае, для задания традиционных правил орфографии используется параметр, определяющий вариант: language=Norwegian, location=Norway, variant=Bokmel Для выражения языка и расположения в компактной и стандартной форме в Java используются коды, определенные Международной организацией по стандартизации (ISO). Язык обозначается двумя строчными буквами в соответствии со стандартом
Locale german = new Locale ("de"); Locale germanGermany = new Locale ("de", "DE"); Locale germanSwitzerland = new Locale ("de", "CH"); Locale norwegianNorwayBokmel = new Locale ("no", "NO", "B");Для удобства пользователей в JDK предусмотрено несколько предопределенных объектов с региональными настройками, а для некоторых языков также имеются объекты, позволяющие указать язык без указания страны:
Предопределенные объекты с региональными установками | Объекты, позволяющие указать язык без указания страны |
---|---|
Locale.CHINA | Locale.CHINESE |
Locale.FRANCE | Locale.FRENCH |
Locale.GERMANY | Locale.GERMAN |
Locale.ITALY | Locale.ITALIAN |
Locale.JAPAN | Locale.JAPANESE |
Locale.US | Locale.ENGLISH |
Locale loc = new Locale ("de", "CH"); System.out.println (loc.getDisplayName (Locale.GERMAN));В результате выполнения этого кода описание региональной настройки будет выведено на указанном в ней языке : Deutsch (Schweiz) Данный пример поясняет, зачем нужны объекты Locale. Передавая их методам, способным реагировать на региональныенастройки, можно отображать текст на языке, понятном пользователю.
Методы пакета java.util.Locale (API)
Метод | Описание |
---|---|
Locale (String language) Locale (String language, String country) Locale (String language, String country, String variant) |
Создает объект Locale для данных языка, страны, варианта |
static Locale getDefault () | Возвращает, используемый по умолчанию региональный стандарт |
static void setDefault (Locale loc) | Устанавливает, используемый по умолчанию региональный стандарт для программы Java |
String getDisplayName () | Возвращает строку с описанием текущего регионального стандарта. Эта строка представляется на языке, определяемом текущим региональным стандартом |
String getDisplayName (Locale loc) | Возвращает строку с описанием текущего регионального стандарта в формате заданного регионального стандарта loc |
String getLanguage () | Возвращает код языка (две строчные буквы) в соответствии со стандартом ISO-639 |
String getDisplayLanguage () | Возвращает название языка в формате текущего регионального стандарта |
String getDisplayLanguage (Locale loc) | Возвращает название языка в формате заданного регионального стандарта loc |
String getCountry () | Возвращает код страны (две строчные буквы) в соответствии со стандартом ISO-3166 |
String getCountryLanguage () | Возвращает название страны в формате текущего регионального стандарта |
String getCountryLanguage (Locale loc) | Возвращает название страны в формате заданного регионального стандарта loc |
String toString () | Возвращает описание регионального стандарта в виде последовательности кодов языка, страны и варианта, которые разделены символами подчеркивания. Например, "de_CH" |