BCP 47 扩展

Java SE 7 发行版符合 IETF BCP 47 标准,该标准支持向Locale添加 extensions。可以使用任何单个字符来表示 extensions,但是有两个 预定义的 extensions 代码:'u'指定* Unicode 语言环境 extensions'x'指定专用使用 extensions*。

Unicode 语言环境扩展由 Unicode 通用语言环境数据存储库(CLDR)项目定义。它们用于指定非语言特定的信息,例如 calendar 或货币。专用 extensions 可用于指定任何其他信息,例如平台(例如 Windows,UNIX 或 Linux)或发行信息(例如 6u23 或 JDK 7)。

extensions 指定为键/值对,其中键是单个字符(通常为'u''x')。格式正确的值具有以下格式:

SUBTAG ('-' SUBTAG)*

以这种格式:

SUBTAG = [0-9a-zA-Z]{2,8}    For key='u'
SUBTAG = [0-9a-zA-Z]{1,8}    For key='x'

请注意,私有用途 extensions 允许使用单个字符的值。但是,Unicode 语言环境 extensions 中的值的最小值为 2 个字符。

扩展字符串 不区分大小写,但是Locale类将所有键和值 Map 为小写。

getExtensionKeys()方法返回Locale的扩展键集(如果有)。 getExtension(key)方法返回指定键的值字符串(如果有)。

Unicode 语言环境扩展

如前所述,Unicode 语言环境扩展由'u'键代码或UNICODE_LOCALE_EXTENSION常量指定。值本身也由键/类型对指定。合法值在Unicode网站的Key/Type Definitions表中定义。密钥代码由两个字母字符指定。下表列出了 Unicode 语言环境扩展键:

Key CodeDescription
cacalendar algorithm
cocollation type
kacollation parameters
cucurrency type
nunumber type
va普通变体类型

Note:

指定 Unicode 语言环境 extensions(例如数字格式)并不能保证基础平台的语言环境服务将接受该请求。

下表显示了 Unicode 语言环境扩展的键/类型对的一些示例。

Key/Type pairDescription
ca-buddhist泰国佛教 calendar
co-pinyin拉丁语拼音 Order
cu-usdU.S. dollars
nu-jpanfin日本财务数字
tz-aldavEurope/Andorra

以下字符串 使用 Linux 平台 Order 的电话簿样式表示德国国家/地区的德语语言环境。此示例还包含一个名为"email"的属性。

de-DE-u-email-co-phonebk-x-linux

以下Locale方法可用于访问有关 Unicode 语言环境扩展的信息。使用前面的德语语言环境示例描述了这些方法。

  • getUnicodeLocaleKeys() –返回 Unicode 语言环境键代码;如果语言环境中没有,则返回一个空集。对于德语示例,这将返回包含单个字符串"co"的集合。

  • getUnicodeLocaleType(String) –返回与 Unicode 语言环境键代码关联的 Unicode 语言环境类型。对于德国示例,调用getUnicodeLocaleType("co")将返回字符串"phonebk"

  • getUnicodeLocaleAttributes() –返回与此语言环境关联的 Unicode 语言环境属性集。在德语示例中,这将返回一个包含单个字符串"email"的集合。

私人用途扩展

只要值格式正确,由'x'密钥代码或PRIVATE_USE_EXTENSION常量指定的私人用途 extensions 可以是任意值。

以下是可能的私人用途扩展的示例:

x-jdk-1-7
x-linux