Java教程是针对JDK 8编写的。本页面中描述的示例和实践未利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发行说明。
Java SE 7版本符合IETF BCP 47标准,该标准支持在Locale
中添加扩展。任何单个字符都可以用来表示扩展,但是有两个预定义的扩展代码:'u'
表示Unicode区域设置扩展,'x'
表示私有使用扩展。
Unicode区域设置扩展由Unicode通用区域数据存储库(CLDR)项目定义。它们用于指定与语言无关的信息,例如日历或货币。私有使用扩展可以用于指定任何其他信息,例如平台(例如Windows、UNIX或Linux)或发布信息(例如6u23或JDK 7)。
扩展被指定为键/值对,其中键是单个字符(通常为'u'
或'x'
)。格式正确的值具有以下格式:
SUBTAG ('-' SUBTAG)*
在此格式中:
SUBTAG = [0-9a-zA-Z]{2,8} 对于键='u' SUBTAG = [0-9a-zA-Z]{1,8} 对于键='x'
请注意,私有使用扩展允许使用单个字符值。但是,Unicode区域设置扩展的值必须至少为2个字符。
扩展字符串不区分大小写,但是Locale
类将所有键和值映射为小写。
getExtensionKeys()
方法返回Locale
的一组扩展键(如果有)。getExtension(key)
方法返回指定键的值字符串(如果有)。
如前所述,Unicode区域设置扩展由'u'
键代码或UNICODE_LOCALE_EXTENSION
常量指定。值本身也由键/类型对指定。合法值在键/类型定义表中定义在Unicode网站上。键代码由两个字母字符指定。以下表格列出了Unicode区域设置扩展键:
键代码 | 描述 |
---|---|
ca | 日历算法 |
co | 排序类型 |
ka | 排序参数 |
cu | 货币类型 |
nu | 数字类型 |
va | 通用变体类型 |
指定Unicode区域设置扩展,如数字格式,并不能保证底层平台的区域设置服务会遵守该请求。
以下表格显示了Unicode区域设置扩展的一些键/类型对的示例。
键/类型对 | 描述 |
---|---|
ca-buddhist | 泰国佛教日历 |
co-pinyin | 拉丁拼音排序 |
cu-usd | 美元 |
nu-jpanfin | 日本金融数字 |
tz-aldav | 欧洲/安道尔 |
以下字符串表示了在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