本Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
请参阅Java语言更改以获取Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发布说明以了解所有JDK版本的新功能、增强功能和已删除或弃用选项的信息。
创建Locale
对象有几种方法。无论使用哪种技术,创建都可以简单地指定语言代码。但是,您还可以通过设置区域(也称为“国家”)和变体代码来进一步区分区域设置。如果您使用的是JDK 7或更高版本,还可以指定脚本代码和Unicode区域设置扩展。
创建Locale
对象的四种方法如下:
Locale.Builder
类和forLanguageTag
方法是在Java SE 7发布中添加的。
LocaleBuilder
类可以使用Locale.Builder
实用类构建符合IETF BCP 47语法的Locale
对象。例如,要指定法语语言和加拿大国家,可以调用Locale.Builder
构造函数,然后使用setter方法链接如下:
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();
最后一个示例创建了俄语语言的Locale
对象:
Locale dLocale = new Locale.Builder().setLanguage("ru").setScript("Cyrl").build();
Locale
构造函数Locale
类提供了三个构造函数来创建Locale
对象:
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
以下示例创建了法语(加拿大)、英语(美国和英国)和俄语的Locale
对象。
aLocale = new Locale("fr", "CA"); bLocale = new Locale("en", "US"); cLocale = new Locale("en", "GB"); dLocale = new Locale("ru");
在JDK 7之前的发布版本中,无法在Locale
对象上设置脚本代码。
forLanguageTag
工厂方法如果您有符合IETF BCP 47标准的语言标签字符串,您可以使用Java SE 7版本引入的forLanguageTag(String)
工厂方法。例如:
Locale aLocale = Locale.forLanguageTag("en-US"); Locale bLocale = Locale.forLanguageTag("ja-JP-u-ca-japanese");
Locale
常量为方便起见,Locale
类提供了一些语言和国家的常量。例如:
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标准的两个或三个小写字母。您可以在http://www.loc.gov/standards/iso639-2/php/code_list.php找到ISO 639代码的完整列表。
以下表格列出了一些语言代码。
语言代码 | 描述 |
---|---|
de |
德语 |
en |
英语 |
fr |
法语 |
ru |
俄语 |
ja |
日语 |
jv |
爪哇语 |
ko |
韩语 |
zh |
中文 |
脚本代码以一个大写字母开头,后跟三个小写字母,并符合ISO 15924标准。你可以在http://unicode.org/iso15924/iso15924-codes.html找到ISO 15924代码的完整列表。
下表列出了一些脚本代码。
脚本代码 | 描述 |
---|---|
Arab |
阿拉伯语 |
Cyrl |
西里尔字母 |
Kana |
片假名 |
Latn |
拉丁字母 |
有三种方法可以检索Locale
的脚本信息:
getScript()
– 返回Locale
对象的四字母脚本代码。如果没有为该区域设置脚本,则返回空字符串。getDisplayScript()
– 返回适用于向用户显示的区域设置脚本的名称。如果可能,名称将针对默认区域设置进行本地化。例如,如果脚本代码为"Latn",则返回的显示脚本名称将在英语语言环境中是"Latin"。getDisplayScript(Locale)
– 返回指定Locale
的本地化显示名称,如果可能的话。地区(国家)代码由两个或三个大写字母组成,符合ISO 3166标准,或者由三个符合UN M.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版本开始,遵循IETF BCP 47标准,变体代码专门用于指示定义语言或其方言的其他变化。IETF BCP 47标准对变体子标记施加了句法限制。您可以在http://www.iana.org/assignments/language-subtag-registry上查看变体代码列表(搜索variant)。
例如,Java SE使用变体代码来支持泰语。按照惯例,对于th
和th_TH
区域设置的NumberFormat
对象将使用常见的阿拉伯数字形状,或者阿拉伯数字,来格式化泰语数字。然而,对于th_TH_TH
区域设置的NumberFormat
将使用泰语数字形状。下面是从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"; }
以下是此示例的屏幕截图: