Java 每个国家/地区的区域设置 ID 是否不同?
Are Java Locale IDs different for each country?
通过查看 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 都不同。换句话说,两个国家不共享相同的 Locale ID。我了解一个国家/地区可能有两个或多个语言环境。
我的理解对吗?我找不到明确的描述来支持我的理解。
谢谢!
Locale
可能包含国家/地区代码,但它们并非用于识别国家/地区。
一个Locale
意在表示显示translations/formatting/etc.
的规则组合
语言环境由语言、国家和变体的组合来标识。
所以:
en
将是英语
en_US
是美国英语的变体
en_US_WIN
可能代表 Windows 上软件 运行 版本的美式英语(例如,如果您的文本需要针对 Windows 用户而有所不同) .
语言和国家/地区部分基于 ISO 标准。但是 Locale 并没有真正限制你对变体部分的操作。
您不应将区域设置视为与国家(或语言)的一对一映射。
例如
fr_FR
= 法国的法语种类繁多。
fr_CH
= 瑞士法语的多样性。
de_CH
= 瑞士德语的多样性。
许多使用区域设置的系统都会遵循根据需要回退到更通用的区域设置的做法。例如ResourceBundle
可用于根据消息密钥查找适当的文本翻译。如果您告诉它在 Locale en_US_WIN
中查找消息但没有找到,它将尝试使用 Locale en_US
然后 en
然后返回到 'root' 语言环境。这意味着如果美国和英国的英语翻译对某事使用相同的文本,那么他们的翻译只需要记录一次。这也意味着,如果代码不知道一种语言,它可以回退到默认语言(存储在根语言环境的文件中)。
如果您有兴趣获取国家或语言列表,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
通过查看 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 都不同。换句话说,两个国家不共享相同的 Locale ID。我了解一个国家/地区可能有两个或多个语言环境。
我的理解对吗?我找不到明确的描述来支持我的理解。
谢谢!
Locale
可能包含国家/地区代码,但它们并非用于识别国家/地区。
一个Locale
意在表示显示translations/formatting/etc.
语言环境由语言、国家和变体的组合来标识。
所以:
en
将是英语en_US
是美国英语的变体en_US_WIN
可能代表 Windows 上软件 运行 版本的美式英语(例如,如果您的文本需要针对 Windows 用户而有所不同) .
语言和国家/地区部分基于 ISO 标准。但是 Locale 并没有真正限制你对变体部分的操作。
您不应将区域设置视为与国家(或语言)的一对一映射。
例如
fr_FR
= 法国的法语种类繁多。fr_CH
= 瑞士法语的多样性。de_CH
= 瑞士德语的多样性。
许多使用区域设置的系统都会遵循根据需要回退到更通用的区域设置的做法。例如ResourceBundle
可用于根据消息密钥查找适当的文本翻译。如果您告诉它在 Locale en_US_WIN
中查找消息但没有找到,它将尝试使用 Locale en_US
然后 en
然后返回到 'root' 语言环境。这意味着如果美国和英国的英语翻译对某事使用相同的文本,那么他们的翻译只需要记录一次。这也意味着,如果代码不知道一种语言,它可以回退到默认语言(存储在根语言环境的文件中)。
如果您有兴趣获取国家或语言列表,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