Java语言环境
Java语言环境类java.util.Locale用于表示将特定文本,数字,日期或者操作本地化的"地理,政治或者文化"区域。因此,"语言环境"对象可以包含一个国家,地区,语言以及一种语言的变体,例如在某个国家的某个地区说出的方言,或者在与该语言起源的国家不同的国家说出的方言。
Locale实例被传递给需要本地化其动作的组件,无论是转换输入,输出还是仅用于内部操作。 Locale类本身不能进行任何国际化或者本地化。
语言环境标准
Locale类符合BCP 47(IETF BCP 47,"用于标识语言的标记")标准。
Locale类还支持LDML(UTS#35" Unicode语言环境数据标记语言")标准,该标准是与BCP 47兼容的语言环境数据交换扩展。有关更多信息,请参见相应的标准。
语言环境内容
Locale实例包含以下子部分:
- 语言
- 脚本
- 国家(地区)
- 变体
- 扩展名
语言
该语言必须是ISO 639 2或者3个字符的语言代码,或者是最多8个字符的注册语言子标签。如果一种语言同时具有2和3个字符的语言代码,请使用2个字符的代码。可以在IANA语言子标签注册表中找到语言代码的完整列表。
语言代码不区分大小写,但是Locale类始终使用小写版本的语言代码。
脚本
脚本代码代表语言的书面形式。可以使用不同的脚本(例如,不同的字母)来编写某些语言。
脚本代码是遵循ISO 15924标准的4个字符的代码。可以在IANA语言子标签注册表中找到脚本代码的完整列表。
脚本代码不区分大小写,但是Locale类始终使用版本,首字母大写,其余字母小写。
国家(地区)
国家/地区代码是遵循ISO 3166标准的2个字符的代码,或者是UN M.49数字区号。可以在IANA语言子标签注册中心找到国家和地区代码的完整列表。
国家/地区代码不区分大小写,但是Locale类使用国家/地区代码的大写版本。
变体
变体部分描述了遵循BCP 47标准的语言的变体(方言)。有关变量的更多详细信息,请参见JavaDoc中的Locale类。
扩展名
扩展部分除了语言和地区以外,还向" Locale"扩展发出信号。例如,显示日期(格里高利语,阿拉伯语,日语等)时要使用的日历。有关扩展的更多详细信息,请参见Java语言中的Locale类。
创建语言环境
创建java.util.Locale实例可以通过四种不同方式完成:
- 语言环境常数
- 语言环境构造函数
- Locale.Builder类(来自Java 7)
- Locale.forLanguageTag工厂方法(来自Java 7)
以下各节介绍了每种方法。
语言环境常数
" java.util.Locale"类包含一组常量,这些常量表示世界上最常用的语言。这些是:
Locale.CANADA Locale.CANADA_FRENCH Locale.CHINA Locale.CHINESE Locale.ENGLISH Locale.FRANCE Locale.FRENCH Locale.GERMAN Locale.GERMANY Locale.ITALIAN Locale.ITALY Locale.JAPAN Locale.JAPANESE Locale.KOREA Locale.KOREAN Locale.PRC Locale.ROOT Locale.SIMPLIFIED_CHINESE Locale.TAIWAN Locale.TRADITIONAL_CHINESE Locale.UK Locale.US
我们可以通过引用这些常量之一来使用它们,如下所示:
Locale locale = Locale.JAPANESE;
区域构造函数
我们还可以使用其构造函数之一创建一个java.util.Locale实例。构造函数为:
Locale(String language) Locale(String language, String country) Locale(String language, String country, String variant)
语言参数应该是ISO 639标准中的2或者3个字母的ISO语言代码。我们还可以使用最多8个字符的语言子标签。
国家/地区应为ISO 3166标准中的2个字符的ISO国家/地区编码。或者,可以使用UN M.49字符区号。
变体应该是语言的任何有效BCP 47变体。
这里有一些例子:
Locale locale = new Locale("en"); // English language Locale locale = new Locale("en", "UK"); // English language, United Kingdom Locale locale = new Locale("en", "CA"); // English language, Canada
区域设置生成器
在Java 7中,我们可以使用Locale.Builder类来构建Locale实例。这是一个例子:
Locale cLocale = new Locale.Builder().setLanguage("en") .setRegion("US").build();
Locale.forLanguageTag()
工厂方法Locale.forLanguageTag()也可以用来创建Locale实例。这是一个例子:
Locale aLocale = Locale.forLanguageTag("en-US");
使用语言环境实例
一旦有了Locale实例,就可以将其用作其他使用Locale本地化其函数的组件的输入。这里有一些例子:
Locale locale = new Locale("da", "DK"); ResourceBundle resourceBundle = ResourceBundle.getBundle("bundleName", locale);
本示例在丹麦创建了一个表示丹麦语的Locale,并使用Locale来获取一个包含丹麦语文本的ResourceBundle。