Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
有几种方法可以创建 Locale
对象。无论使用何种技术,创建都可以像指定语言代码一样简单。但是,你可以通过设置区域(也称为“国家/地区”)和变体代码来进一步区分语言环境。如果你使用的是 JDK 7 或更高版本,则还可以指定脚本代码和 Unicode 语言环境扩展。
创建 Locale
对象的四种方法是:
Locale.Builder
类和 forLanguageTag
方法。
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 |
German |
en |
English |
fr |
French |
ru |
Russian |
ja |
Japanese |
jv |
Javanese |
ko |
Korean |
zh |
Chinese |
脚本代码以大写字母开头,后跟三个小写字母,符合 ISO 15924 标准。你可以在 http://unicode.org/iso15924/iso15924-codes.html 找到 ISO 15924 代码的完整列表。
下表列出了一些脚本代码。
脚本代码 | 描述 |
---|---|
Arab |
Arabic |
Cyrl |
Cyrillic |
Kana |
Katakana |
Latn |
Latin |
获取 Locale
的脚本信息有三种方法:
getScript()
返回 Locale
对象的 4 个字母的脚本代码。如果没有为语言环境定义脚本,则返回空字符串。getDisplayScript()
返回适合显示给用户的语言环境脚本的名称。如果可能,将为默认语言环境本地化名称。因此,例如,如果脚本代码是“Latin”,则返回的显示脚本名称将是英语语言环境的字符串“Latin”。getDisplayScript(Locale)
如果可能,返回本地化的指定 Locale
的显示名称。区域(国家/地区)代码包含符合 ISO 3166 标准的两个或三个大写字母,或符合 UN M.49 标准的三个数字。可以在 http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html 找到代码的副本。
下表包含几个示例国家和地区代码。
A-2 Code | A-3 Code | Numeric Code | 描述 |
---|---|---|---|
AU |
AUS |
036 |
Australia |
BR |
BRA |
076 |
Brazil |
CA |
CAN |
124 |
Canada |
CN |
CHN |
156 |
China |
DE |
DEU |
276 |
Germany |
FR |
FRA |
250 |
France |
IN |
IND |
356 |
India |
RU |
RUS |
643 |
Russian Federation |
US |
USA |
840 |
United States |
可选的 variant
代码可用于进一步区分 Locale
。例如,变体代码可用于指示区域代码未涵盖的辩证差异。
从符合 IETF BCP 47 标准的 Java SE 7 版本开始,变体代码专门用于指示定义语言或其方言的其他变体。IETF BCP 47 标准对变体子标签强加了语法限制。你可以在 http://www.iana.org/assignments/language-subtag-registry 上查看变体代码列表(搜索 variant)。
例如,Java SE 使用变体代码来支持泰语。按照规范,NumberFormat
对象用于 th
和 th_TH
语言环境的将使用常见的阿拉伯数字形状,或阿拉伯数字来格式化泰语数字。但是,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"; }
以下是此示例的屏幕截图: