Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
Java SE 7 版本符合 IETF BCP 47 标准,该标准支持向 Locale
添加扩展。任何单个字符都可用于表示扩展名,但有两个预定义的扩展代码:'u'
指定 Unicode locale extension ( Unicode 语言环境扩展),'x'
指定 private use extension (私有使用扩展)。
Unicode 语言环境扩展由 Unicode Common Locale Data Repository (CLDR) 项目定义。它们用于指定非语言特定的信息,例如日历或货币。私有用扩展可用于指定任何其他信息,例如平台(例如,Windows,UNIX 或 Linux)或发布信息(例如,6u23 或 JDK 7)。
扩展名被指定为键/值对,其中键是单个字符(通常为 'u'
或 'x'
)。格式良好的值具有以下格式:
SUBTAG ('-' SUBTAG)*
在这种格式:
SUBTAG = [0-9a-zA-Z]{2,8} For key='u' SUBTAG = [0-9a-zA-Z]{1,8} For key='x'
请注意,私有用扩展允许使用单字符值。但是,Unicode 语言环境扩展中的值最小为 2 个字符。
扩展字符串不区分大小写,但 Locale
类将所有键和值映射为小写。
getExtensionKeys()
方法返回 Locale
的扩展键集(如果有)。getExtension(key)
方法返回指定键的值字符串(如果有)。
如前所述,Unicode 语言环境扩展由 'u'
键代码或 UNICODE_LOCALE_EXTENSION
常量指定。值本身也由键/类型对指定。合法值在 Unicode 网站的 Key/Type Definitions 表中定义。键代码由两个字母字符指定。下表列出了 Unicode 语言环境扩展键:
键码 | 描述 |
---|---|
ca | 日历算法 |
co | 排序类型 |
ka | 排序参数 |
cu | 货币类型 |
nu | 数字类型 |
va | 常见的变种类型 |
指定 Unicode 语言环境扩展(例如数字格式)并不保证底层平台的语言环境服务将遵循该请求。
下表显示了 Unicode 语言环境扩展的键/类型对的一些示例。
键/类型对 | 描述 |
---|---|
ca-buddhist | 泰国佛教日历 |
co-pinyin | 拉丁文拼音排序 |
cu-usd | 美国美元 |
nu-jpanfin | 日本金融数字 |
tz-aldav | Europe/Andorra |
以下字符串表示使用 Linux 平台的电话簿样式排序的德国所在国家/地区的德语语言环境。此示例还包含名为 "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
常量指定的私有使用扩展可以是任何内容,只要该值格式正确即可。
以下是可能的私有使用扩展的示例:
x-jdk-1-7 x-linux