通过查看Oracle上与西班牙语相关的区域设置ID
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区域设置ID都不同。换句话说,两个国家不共享相同的区域设置ID。我了解一个国家/地区可能有两个或更多区域设置。
我的理解是对的吗?我无法找到明确的描述来支持我的理解。
谢谢!
答案 0 :(得分:2)
Locale
可能包含国家/地区代码,但并非用于标识国家/地区。
Locale
旨在表示用于显示翻译/格式化等的规则的组合。
区域设置使用语言,国家/地区和变体的组合进行标识。
所以:
en
将是英文en_US
将成为美国英语口语的变体en_US_WIN
可能代表美国英语版本的Windows上运行的软件(例如,如果您的文本需要与Windows用户不同)。语言和国家/地区部分基于ISO标准。但是Locale并没有真正限制你对变体部分所做的事情。
您不应该将区域设置视为与国家/地区(或使用语言)进行一对一映射。
e.g。
fr_FR
=在法国使用各种法语。fr_CH
=在瑞士使用各种法语。de_CH
=在瑞士使用的各种德语。许多使用Locales的系统将遵循根据需要回退到更一般的语言环境的做法。例如ResourceBundle
可用于根据消息密钥查找适当的文本翻译。如果您告诉它在区域设置en_US_WIN
中找到一条消息并且未找到该消息,则会尝试使用区域设置en_US
然后en
,然后再回到“根”语言环境。这意味着如果美国和英国的英语翻译使用相同的文本,那么他们的翻译只需要记录一次。这也意味着如果代码不知道某种语言,它可以回退到默认语言(存储在根语言环境的文件中)。
如果您对获取国家/地区或语言列表感兴趣,可以在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