2015-06-24 3 views
1

Глядя на испанском, связанных с локали идентификаторов в OracleЯвляются ли идентификаторы языка Java разными для каждой страны?

http://www.oracle.com/technetwork/java/javase/javase7locales-334809.html

Spanish Argentina es_AR 
Spanish Bolivia es_BO 
Spanish Chile es_CL 
Spanish Colombia es_CO 
Spanish Costa Rica es_CR 
Spanish Dominican Republic es_DO 
Spanish Ecuador es_EC 
Spanish El Salvador es_SV 
Spanish Guatemala es_GT 
Spanish Honduras es_HN 
Spanish Mexico es_MX 
Spanish Nicaragua es_NI 
Spanish Panama es_PA 
Spanish Paraguay es_PY 
Spanish Peru es_PE 
Spanish Puerto Rico es_PR 
Spanish Spain es_ES 
Spanish United States es_US 
Spanish Uruguay es_UY 
Spanish Venezuela es_VE 

Я чувствую Java идентификаторы локали различны для каждой страны. Иными словами, две страны не имеют одного и того же идентификатора языка. Я понимаю, что у страны могут быть две или более локали.

Мое понимание правильно? Я не могу найти четкое описание, чтобы поддержать мое понимание.

Спасибо!

+1

локаль = язык + регион. – Hacketo

+1

Язык может влиять на переводы, валюту, отображение номера и формат времени с часовым поясом. Помните - locale! = Язык – Antoniossss

+0

Hacketo и Antoniossss, большое спасибо за ваш вклад! Согласно Oracle на http://docs.oracle.com/javase/7/docs/api/java/util/Locale.html: Объект Locale представляет собой определенный географический, политический или культурный регион. Означает ли это, что мое понимание выше верно? – curious1

ответ

2

A Locale может включать код страны, но они не предназначены для идентификации стран.

A Locale предназначен для представления комбинации правил для отображения переводов/форматирования и т. Д.

Местные жители обозначаются комбинацией языка, страны и варианта.

Итак:

  • en будет английский
  • en_US бы вариант английского языка говорят в Америке
  • en_US_WIN может представлять американский английский для версии программного обеспечения, работающего на Windows (например, если вы есть текст, который должен быть другим для пользователей Windows).

Языковые и страновые части основаны на стандартах ИСО. Но Locale на самом деле не ограничивает то, что вы делаете с вариантом.

Вы не должны думать о том, что локали имеют сопоставление «один к одному» со странами (или с языками).

например.

  • fr_FR = Разнообразие французского языка во Франции.
  • fr_CH = Разнообразие французского языка в Швейцарии.
  • de_CH = Разнообразие немецкого языка в Швейцарии.

Многие системы, использующие Locales, будут следовать практике возврата к более общим языкам по мере необходимости. например ResourceBundle, который можно использовать для поиска соответствующих текстовых переводов на основе ключа сообщения. Если вы сказали ему найти сообщение в Locale en_US_WIN и он его не нашел, он затем попытался бы с Locale en_US, а затем en, а затем снова отскакивал от «root» Locale. Это означает, что если бы переводы на американском и британском языках использовали один и тот же текст для чего-то, тогда их перевод нужно было бы записать только один раз. Это также означает, что если код не знает о языке, он может вернуться к языку по умолчанию (сохраненному в файлах для корневого языка).

Если вы заинтересованы в получении списка стран или языков, для этого вам необходимо обратиться к Locale.

Locale.getISOCountries(); // Returns list of ISO country codes 
Locale.getISOLanguages(); // Returns list of ISO language codes 

Есть также методы для получения читаемых имен человеческих языков:

Locale.ENGLISH.getDisplayLanguage(Locale.GERMAN); //Englisch 
Locale.GERMAN.getDisplayLanguage(Locale.ENGLISH); //German 
Locale.ENGLISH.getDisplayLanguage(Locale.English); //English 
Locale.GERMAN.getDisplayLanguage(Locale.GERMAN); //Deutsch 

И человек читаемых названия стран:

Locale.US.getDisplayCountry(Locale.ENGLISH); //United States 
Locale.GERMANY.getDisplayCountry(Locale.ENGLISH); //Germany 

Locale.US.getDisplayCountry(Locale.GERMAN); //Vereinigte Staaten von Amerika 
Locale.GERMANY.getDisplayCountry(Locale.GERMAN); //Deutschland 
+0

Николас, большое спасибо за всю информацию! Один быстрый вопрос: есть ли две страны, которые имеют один и тот же идентификатор языка? – curious1

+1

@ curious1: Нет, нет. Locale использует стандарты ISO: [ISO_3166-1 alpha-2] (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) для стран и [ISO_639-1] (https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) для языков. Они уникальны. Эти стандарты также описывают три буквенных кода; и существуют методы в Locale 'getISO3Language()' и 'getISO3Country()'. Из того, что я могу сказать, они не особенно необходимы для стран, но есть некоторые языки, на которых нет двухбуквенного кода (в мире много языков), но имеют трехбуквенный код. –

+0

Николас, ты действительно специалист по этой теме! Последний вопрос: каждой стране присваивается хотя бы один идентификатор локали. Правильно ли это утверждение? Благодаря! – curious1