# BCP 47 扩展

> 原文： [https://docs.oracle.com/javase/tutorial/i18n/locale/extensions.html](https://docs.oracle.com/javase/tutorial/i18n/locale/extensions.html)

Java SE 7 版本符合 IETF BCP 47 标准，该标准支持向`Locale`添加扩展。任何单个字符都可用于表示扩展名，但有两个预定义的扩展代码：`'u'`指定 _Unicode 语言环境扩展 _，`'x'`指定 _ 专用扩展名 _。

Unicode 语言环境扩展由 Unicode [通用语言环境数据存储库（CLDR）](http://cldr.unicode.org/)项目定义。它们用于指定非语言特定的信息，例如日历或货币。私有用扩展可用于指定任何其他信息，例如平台（例如，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()`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#getExtensionKeys--) 方法返回`Locale`的扩展键组（如果有）。 [`getExtension(key)`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#getExtension-char-) 方法返回指定键的值字符串（如果有）。

如前所述，Unicode 语言环境扩展由`'u'`键代码或`UNICODE_LOCALE_EXTENSION`常量指定。值本身也由键/类型对指定。合法值在 [Unicode](http://www.unicode.org) 网站的[键/类型定义](http://www.unicode.org/reports/tr35/#Key_Type_Definitions)表中定义。密钥代码由两个字母字符指定。下表列出了 Unicode 语言环境扩展键：

| 关键代码 | 描述 |
| --- | --- |
| CA | 日历算法 |
| 合作 | 整理类型 |
| K a | 整理参数 |
| 铜 | 货币类型 |
| NU | 数字类型 |
| VA | 常见的变种类型 |

* * *

**Note:** 

指定 Unicode 语言环境扩展（例如数字格式）并不保证底层平台的语言环境服务将遵循该请求。

* * *

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

| 键/类型对 | 描述 |
| --- | --- |
| CA-佛教 | 泰国佛教日历 |
| 共同拼音 | 拼音订购拉丁文 |
| 铜 - 美元 | 美元 |
| NU-jpanfin | 日本金融数字 |
| TZ-aldav | 欧洲/安道尔 |

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

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

```

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

*   [`getUnicodeLocaleKeys()`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#getUnicodeLocaleKeys--) - 返回 Unicode 语言环境键代码，如果语言环境没有，则返回空集。对于德语示例，这将返回包含单个字符串`"co"`的集合。
*   [`getUnicodeLocaleType(String)`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#getUnicodeLocaleType-java.lang.String-) - 返回与 Unicode 语言环境键代码关联的 Unicode 语言环境类型。为德语示例调用`getUnicodeLocaleType("co")`将返回字符串`"phonebk"`。
*   [`getUnicodeLocaleAttributes()`](https://docs.oracle.com/javase/8/docs/api/java/util/Locale.html#getUnicodeLocaleAttributes--) - 返回与此语言环境关联的 Unicode 语言环境属性集（如果有）。在德语示例中，这将返回包含单个字符串`"email"`的集合。

由`'x'`键代码或`PRIVATE_USE_EXTENSION`常量指定的专用扩展可以是任何内容，只要该值格式良好即可。

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

```
x-jdk-1-7
x-linux

```