创建语言环境
有多种创建Locale
对象的方法。无论使用哪种技术,创建都可以像指定语言代码一样简单。但是,您可以通过设置区域(也称为“国家/地区”)和变体代码来进一步区分语言环境。如果您使用的是 JDK 7 发行版或更高版本,则还可以指定脚本代码和 Unicode 语言环境扩展。
创建Locale
对象的四种方法是:
Version Note:
Java SE 7 发行版中添加了Locale.Builder
类和forLanguageTag
方法。
LocaleBuilder Class
Locale.BuilderUtil 类可用于构造符合 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 Constructors
Locale
类中有三个构造函数可用于创建Locale
对象:
以下示例为加拿大的法语,美国和英国的英语以及俄语创建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 标准,则可以使用forLanguageTag(String)工厂方法,该方法是 Java SE 7 发行版中引入的。例如:
Locale aLocale = Locale.forLanguageTag("en-US");
Locale bLocale = Locale.forLanguageTag("ja-JP-u-ca-japanese");
Locale Constants
为方便起见,Locale
类为某些语言和国家/地区提供了constants。例如:
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");
Codes
以下各节讨论语言代码以及可选的脚本,区域和变体代码。
Language Code
语言代码是符合 ISO 639 标准的两个或三个小写字母。您可以在http://www.loc.gov/standards/iso639-2/php/code_list.php找到 ISO 639 代码的完整列表。
下表列出了一些语言代码。
samples 语言代码
Language Code | Description |
---|---|
de | German |
en | English |
fr | French |
ru | Russian |
ja | Japanese |
jv | Javanese |
ko | Korean |
zh | Chinese |
Script Code
脚本代码以大写字母开头,后跟三个小写字母,并符合 ISO 15924 标准。您可以在http://unicode.org/iso15924/iso15924-codes.html找到 ISO 15924 代码的完整列表。
下表列出了一些脚本代码。
示例脚本代码
Script Code | Description |
---|---|
Arab | Arabic |
Cyrl | Cyrillic |
Kana | Katakana |
Latn | Latin |
有三种方法可检索Locale
的脚本信息:
-
getScript() –返回
Locale
对象的 4 个字母的脚本代码。如果没有为语言环境定义脚本,则返回一个空字符串。 -
getDisplayScript() –返回适合显示给用户的语言环境脚本的名称。如果可能,该名称将被本地化为默认语言环境。因此,例如,如果脚本代码为“ Latn”,则对于英语语言环境,返回的 diplay 脚本名称将为字符串“ Latin”。
-
getDisplayScript(Locale) –如果可能的话,返回指定的
Locale
本地化的显示名称。
Region Code
地区(国家/地区)代码由符合 ISO 3166 标准的两个或三个大写字母或符合 UN M.49 标准的三个数字组成。可以在http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html找到代码的副本。
下表包含几个示例国家和地区代码。
samples 地区代码
A-2 Code | A-3 Code | Numeric Code | Description |
---|---|---|---|
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 Code
可选的variant
代码可用于进一步区分Locale
。例如,变体代码可用于指示区域代码未涵盖的辩证差异。
Version Note:
在 Java SE 7 发行版之前,有时会使用变体代码来识别并非特定于语言或地区的差异。例如,它可能已被用来识别 Windows 或 UNIX 等计算平台之间的差异。根据 IETF BCP 47 标准,不建议使用此方法。
要定义与您的环境相关的非语言特定变体,请使用扩展机制,如BCP 47 扩展中所述。
从符合 IETF BCP 47 标准的 Java SE 7 版本开始,变体代码专门用于表示定义一种语言或其方言的其他变体。 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";
}
以下是此示例的屏幕截图: