文档

Java™ 教程-Java Tutorials 中文版
BCP 47 扩展
Trail: Internationalization
Lesson: Setting the Locale

BCP 47 扩展

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 语言环境扩展

如前所述,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 语言环境扩展的信息。使用以前的德语语言环境示例描述了这些方法。

私有使用扩展

'x' 键代码或 PRIVATE_USE_EXTENSION 常量指定的私有使用扩展可以是任何内容,只要该值格式正确即可。

以下是可能的私有使用扩展的示例:

x-jdk-1-7
x-linux

Previous page: Creating a Locale
Next page: Identifying Available Locales