Java语言环境

时间:2020-01-09 10:35:34  来源:igfitidea点击:

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。