- 所有已实现的接口:
-
Serializable
,Cloneable
Locale
对象表示特定的地理、政治或文化区域。需要Locale
执行任务的操作称为区域敏感,并使用Locale
为用户定制信息。例如,显示数字是一个区域敏感的操作——数字应根据用户的本国、地区或文化的习俗和惯例进行格式化。
Locale
类实现了IETF BCP 47,由RFC 4647“语言标签匹配”和RFC 5646“用于识别语言的标签”组成,支持LDML(UTS#35,“Unicode区域设置数据标记语言”)BCP 47兼容扩展以进行区域设置数据交换。
Locale
对象在逻辑上由下面描述的字段组成。
- language
-
ISO 639 alpha-2或alpha-3语言代码,或注册的最多8个字母的语言子标签(用于将来的增强)。当一个语言既有alpha-2代码又有alpha-3代码时,必须使用alpha-2代码。您可以在IANA语言子标签注册表中找到完整的有效语言代码列表(搜索“类型:语言”)。语言字段不区分大小写,但
Locale
始终将其规范化为小写。 -
格式良好的语言值的形式为
[a-zA-Z]{2,8}
。请注意,这不是完整的BCP47语言生成,因为它排除了extlang。它们不需要,因为现代三字母语言代码取代了它们。 - 例如:“en”(英语),“ja”(日语),“kok”(孔卡尼)
- script
-
ISO 15924 alpha-4脚本代码。您可以在IANA语言子标签注册表中找到完整的有效脚本代码列表(搜索“类型:脚本”)。脚本字段不区分大小写,但
Locale
始终将其规范化为标题大小写(第一个字母大写,其余字母小写)。 -
格式良好的脚本值的形式为
[a-zA-Z]{4}
- 例如:“Latn”(拉丁文),“Cyrl”(西里尔文)
- country (region)
-
ISO 3166 alpha-2国家代码或UN M.49数字3区域代码。您可以在IANA语言子标签注册表中找到完整的有效国家和地区代码列表(搜索“类型:地区”)。国家(地区)字段不区分大小写,但
Locale
始终将其规范化为大写。 -
格式良好的国家/地区值的形式为
[a-zA-Z]{2} | [0-9]{3}
- 例如:“US”(美国),“FR”(法国),“029”(加勒比)
- variant
-
用于指示
Locale
变体的任意值。当有两个或更多变体值分别表示其自己的语义时,这些值应按重要性排序,最重要的值排在第一位,用下划线('_')分隔。变体字段区分大小写。 -
注意:IETF BCP 47对变体子标签施加了语法限制。此外,BCP 47子标签严格用于指示未由任何语言、脚本和地区子标签组合覆盖的语言或其方言的其他变体。您可以在IANA语言子标签注册表中找到完整的有效变体代码列表(搜索“类型:变体”)。
然而,在
Locale
中,变体字段历史上被用于任何类型的变体,而不仅仅是语言变体。例如,在Java SE运行时环境中支持的一些变体指示替代文化行为,如日历类型或数字脚本。在BCP 47中,这种不标识语言的信息由扩展子标签或私有使用子标签支持。 -
格式良好的变体值的形式为
SUBTAG (('_'|'-') SUBTAG)*
,其中SUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}
。(注意:BCP 47仅使用连字符('-')作为分隔符,这更宽松)。 - 例如:“polyton”(多音希腊语),“POSIX”
- extensions
-
从单个字符键到字符串值的映射,指示除语言标识之外的扩展。在
Locale
中的扩展实现了BCP 47扩展子标签和私有使用子标签的语义和语法。扩展不区分大小写,但Locale
将所有扩展键和值规范化为小写。请注意,扩展不能具有空值。 -
格式良好的键是来自集合
[0-9a-zA-Z]
的单个字符。格式良好的值的形式为SUBTAG ('-' SUBTAG)*
,其中对于键'x',SUBTAG = [0-9a-zA-Z]{1,8}
,对于其他键,SUBTAG = [0-9a-zA-Z]{2,8}
(即,'x'允许单字符子标签)。 - 例如:键="u"/值="ca-japanese"(日本日历),键="x"/值="java-1-7"
Locale
类不提供任何验证功能。Builder
仅检查单个字段是否满足语法要求(格式良好),但不验证值本身。有关详细信息,请参阅Locale.Builder
。
Unicode区域设置/语言扩展
UTS#35,“Unicode区域设置数据标记语言”定义了用于覆盖或细化与区域设置关联的默认行为的可选属性和关键字。关键字由键和类型对表示。例如,“nu-thai”表示应使用泰语本地数字(值:“thai”)来格式化数字(键:“nu”)。
关键字通过扩展键'u'(UNICODE_LOCALE_EXTENSION
)映射到BCP 47扩展值。上述示例“nu-thai”变成了扩展“u-nu-thai”。
因此,当一个Locale
对象包含Unicode区域设置属性和关键字时,getExtension(UNICODE_LOCALE_EXTENSION)
将返回表示此信息的字符串,例如“nu-thai”。Locale
类还提供getUnicodeLocaleAttributes()
、getUnicodeLocaleKeys()
和getUnicodeLocaleType(java.lang.String)
,允许您直接访问Unicode区域设置属性和键/类型对。当表示为字符串时,Unicode区域设置扩展按字母顺序列出属性,然后按字母顺序列出键的类型序列(在定义类型时,组成键的子标签的顺序是固定的)
格式良好的区域设置键的形式为[0-9a-zA-Z]{2}
。格式良好的区域设置类型的形式为"" | [0-9a-zA-Z]{3,8} ('-' [0-9a-zA-Z]{3,8})*
(可以为空,或者是长度为3-8个字母数字的一系列子标签)。格式良好的区域设置属性的形式为[0-9a-zA-Z]{3,8}
(它是与区域设置类型子标签形式相同的单个子标签)。
Unicode区域设置扩展在区域敏感服务中指定了可选行为。尽管LDML规范定义了各种键和值,但Java运行时环境中的实际区域敏感服务实现可能不支持任何特定的Unicode区域设置属性或键/类型对。
获取Locale
有几种方法可以获取Locale
对象。
Builder
使用Locale.Builder
,您可以构建符合BCP 47语法的Locale
对象。
工厂方法
方法forLanguageTag(java.lang.String)
获取一个符合良好的BCP 47语言标签的Locale
对象。方法of(String, String, String)
及其重载从给定的language
、country
和/或variant
定义的值中获取一个Locale
对象。
Locale常量
Locale
类提供了许多方便的常量,您可以使用这些常量获取常用区域设置的Locale
对象。例如,Locale.US
是美国的Locale
对象。
区域设置匹配
如果应用程序或系统国际化并为多个区域提供本地化资源,有时需要找到一个或多个符合每个用户特定偏好的区域(或语言标签)。请注意,在此区域匹配文档中,“语言标签”一词与“区域设置”交替使用。
为了将用户的首选区域与一组语言标签进行匹配,RFC 4647语言标签匹配定义了两种机制:过滤和查找。过滤用于获取所有匹配的区域设置,而查找用于选择最佳匹配的区域设置。匹配是不区分大小写的。这些匹配机制在以下部分中描述。
用户的偏好称为语言优先级列表,并表示为语言范围列表。语法上有两种类型的语言范围:基本和扩展。有关详细信息,请参阅Locale.LanguageRange
。
过滤
过滤操作返回所有匹配的语言标签。在RFC 4647中定义如下:“在过滤中,每个语言范围表示最不具体的语言标签(即,具有最少子标签数的语言标签)是可接受的匹配。匹配标签集中的所有语言标签的子标签数量都等于或大于语言范围的子标签数量。语言范围中的每个非通配符子标签都将出现在每个匹配语言标签中。”
有两种类型的过滤:基本语言范围的过滤(称为“基本过滤”)和扩展语言范围的过滤(称为“扩展过滤”)。它们可能根据给定的语言优先级列表中包含的语言范围的类型返回不同的结果。Locale.FilteringMode
是指定如何进行过滤的参数。
查找
查找操作返回最佳匹配的语言标签。在RFC 4647中定义如下:“与过滤相反,每个语言范围表示最具体的标签是可接受的匹配。根据用户的优先级,找到的第一个匹配标签被认为是最接近的匹配并返回。”
例如,如果语言优先级列表由两个语言范围"zh-Hant-TW"
和"en-US"
组成,并按优先顺序排列,查找方法逐步搜索下面的语言标签,以找到最佳匹配的语言标签。
如果有一个语言标签完全匹配上述语言范围,将返回该语言标签。1. 繁体中文(台湾) 2. 繁体中文 3. 中文 4. 美式英语 5. 英语
"*"
是特殊的语言范围,查找时会被忽略。
如果多个语言标签由于语言范围中包含的子标签 '*'
而匹配,那么通过对语言标签集合进行迭代的 Iterator
返回的第一个匹配语言标签将被视为最佳匹配。
Locale 的使用
一旦获得了一个 Locale
,您可以查询它本身的信息。使用 getCountry
获取国家(或地区)代码,使用 getLanguage
获取语言代码。您可以使用 getDisplayCountry
获取适合显示给用户的国家名称。同样,您可以使用 getDisplayLanguage
获取适合显示给用户的语言名称。有趣的是,getDisplayXXX
方法本身是区域敏感的,并且有两个版本:一个使用默认的 DISPLAY
区域设置,另一个使用作为参数指定的区域设置。
Java 平台提供了许多执行区域敏感操作的类。例如,NumberFormat
类以区域敏感的方式格式化数字、货币和百分比。诸如 NumberFormat
这样的类有几个便利方法用于创建该类型的默认对象。例如,NumberFormat
类提供了这三个便利方法用于创建默认的 NumberFormat
对象:
NumberFormat.getInstance();
NumberFormat.getCurrencyInstance();
NumberFormat.getPercentInstance();
FORMAT
区域设置:
NumberFormat.getInstance(myLocale);
NumberFormat.getCurrencyInstance(myLocale);
NumberFormat.getPercentInstance(myLocale);
Locale
是用于标识您想要获取的对象(NumberFormat
)的机制。区域设置只是用于标识对象的机制,而不是 对象本身的容器。
兼容性
为了保持兼容性,Locale 的构造函数保留了 Java 运行时环境版本 1.7 之前的行为。toString
方法也基本保持不变。因此,Locale 对象可以继续像以前一样使用。特别是,解析 toString 输出为语言、国家和变体字段的客户端可以继续这样做(尽管强烈不建议这样做),尽管如果存在脚本或扩展,变体字段将包含额外信息。
此外,BCP 47 强加了语法限制,这些限制不适用于 Locale 的构造函数。这意味着某些 Locale 和 BCP 47 语言标签之间的转换可能会丢失信息。因此,toLanguageTag
无法表示语言、国家或变体不符合 BCP 47 的区域设置的状态。
由于这些问题,建议客户端迁移到构建符合规范的区域设置并改用 forLanguageTag
和 Locale.Builder
API。希望获得完整区域设置的字符串表示的客户端可以始终依赖 toLanguageTag
来实现此目的。
特殊情况
出于兼容性原因,两个不符合规范的区域设置被视为特殊情况。这些是 ja_JP_JP
和 th_TH_TH
。这些在 BCP 47 中格式不正确,因为变体太短。为了便于迁移到 BCP 47,这两个情况在构建时被特殊处理。这两种情况(仅限这两种情况)会导致构造函数生成一个扩展,所有其他值的行为与 Java 7 之前完全相同。
Java 使用 ja_JP_JP
表示在日本使用的日语以及日本帝国历法。现在可以使用 Unicode 区域设置扩展来表示这一点,方法是指定 Unicode 区域设置键 ca
(表示“日历”)和类型 japanese
。当使用参数 "ja"、"JP"、"JP" 调用 Locale 构造函数时,将自动添加扩展 "u-ca-japanese"。
Java 使用 th_TH_TH
表示在泰国使用的泰语以及泰国数字。现在也可以使用 Unicode 区域设置扩展来表示这一点,方法是指定 Unicode 区域设置键 nu
(表示“数字”)和值 thai
。当使用参数 "th"、"TH"、"TH" 调用 Locale 构造函数时,将自动添加扩展 "u-nu-thai"。
序列化
在序列化期间,writeObject 将所有字段写入输出流,包括扩展。
在反序列化期间,readResolve 根据 特殊情况 中描述的方式添加扩展,仅适用于 th_TH_TH 和 ja_JP_JP 这两种情况。
旧语言代码
Locale 的构造函数始终将三个语言代码转换为它们早期的、已废弃的形式: he
转换为 iw
,yi
转换为 ji
,id
转换为 in
。自 Java SE 17 起,不再这样。每种语言都映射到其新形式;iw
映射到 he
,ji
映射到 yi
,in
映射到 id
。
为了向后兼容的行为,系统属性 java.locale.useOldISOCodes
将行为恢复到 Java SE 17 之前的状态。如果系统属性设置为 true
,这三个当前语言代码将映射到它们的向后兼容形式。该属性仅在 Java 运行时启动时读取,随后对 System.setProperty()
的调用将不会产生任何效果。
在 1.7 中添加的 API 在旧语言代码和新语言代码之间进行映射,将映射代码保留在 Locale 内部(因此 getLanguage
和 toString
反映了映射代码,这取决于 java.locale.useOldISOCodes
系统属性),但在 BCP 47 语言标签 API 中使用新代码(因此 toLanguageTag
反映了新代码)。这样无论使用哪种代码或 API 构造 Locale,都保持了 Locale 之间的等价性。Java 的默认资源包查找机制也实现了这种映射,因此资源可以使用任一约定命名,参见 ResourceBundle.Control
。
三字母语言/国家(地区)代码
Locale 构造函数始终规定语言和国家参数的长度为两个字符,尽管实际上它们接受任何长度。现在规范已经放宽,允许语言代码为两到八个字符,国家(地区)代码为两到三个字符,特别是在 IANA 语言子标记注册表中指定的三字母语言代码和三位数地区代码。为了保持兼容性,实现仍然不会强加长度约束。
- 自 JDK 版本:
- 1.1
- 外部规范
- 参见:
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
Builder
用于根据设置的值构建Locale
实例。static enum
区域类别的枚举。static enum
此枚举提供了用于区域匹配的过滤模式常量。static enum
用于指定 ISO 3166 中定义的类型的枚举。static final class
此类表示在 RFC 4647 语言标签匹配 中定义的“语言范围”。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final Locale
有用的国家常量。static final Locale
有用的国家常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final char
私有使用扩展('x')的键。static final Locale
根区域的有用常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final Locale
有用的语言常量。static final Locale
有用的国家常量。static final char
Unicode 区域扩展('u')的键。static final Locale
有用的国家常量。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescription返回已安装区域的流。static String
caseFoldLanguageTag
(String languageTag) 返回大小写折叠的 IETF BCP 47 语言标签。clone()
覆盖 Cloneable。boolean
如果此 Locale 等于另一个对象,则返回 true。filter
(List<Locale.LanguageRange> priorityList, Collection<Locale> locales) 使用 RFC 4647 中定义的过滤机制返回匹配的Locale
实例列表。filter
(List<Locale.LanguageRange> priorityList, Collection<Locale> locales, Locale.FilteringMode mode) 使用 RFC 4647 中定义的过滤机制返回匹配的Locale
实例列表。filterTags
(List<Locale.LanguageRange> priorityList, Collection<String> tags) 使用 RFC 4647 中定义的基本过滤机制返回匹配的语言标签列表。filterTags
(List<Locale.LanguageRange> priorityList, Collection<String> tags, Locale.FilteringMode mode) 使用 RFC 4647 中定义的基本过滤机制返回匹配的语言标签列表。static Locale
forLanguageTag
(String languageTag) 返回指定的 IETF BCP 47 语言标签字符串的 Locale。static Locale[]
返回已安装区域的数组。返回此区域的国家/地区代码,应为空字符串、大写 ISO 3166 2 位字母代码或 UN M.49 3 位代码之一。static Locale
获取此 Java 虚拟机实例的默认区域设置的当前值。static Locale
getDefault
(Locale.Category category) 获取此 Java 虚拟机实例的指定类别的默认区域设置的当前值。final String
返回适合显示给用户的区域的国家名称。getDisplayCountry
(Locale inLocale) 返回适合显示给用户的区域的国家名称。final String
返回适合显示给用户的区域的语言名称。getDisplayLanguage
(Locale inLocale) 返回适合显示给用户的区域的语言名称。final String
返回适合显示给用户的区域的名称。getDisplayName
(Locale inLocale) 返回适合显示给用户的区域的名称。返回适合显示给用户的区域的脚本名称。getDisplayScript
(Locale inLocale) 返回适合显示给用户的区域的脚本名称。final String
返回适合显示给用户的区域的变体代码名称。getDisplayVariant
(Locale inLocale) 返回适合显示给用户的区域的变体代码名称。getExtension
(char key) 返回与指定键关联的扩展(或私有使用)值,如果与键关联的扩展不存在,则返回 null。返回与此区域关联的扩展键集,如果没有扩展,则返回空集。返回此区域的国家的三字母缩写。返回此区域的语言的三字母缩写。static String[]
返回 ISO 3166 中定义的所有 2 位国家代码列表。返回指定类型的 ISO3166 国家代码的Set
。static String[]
返回 ISO 639 中定义的所有 2 位语言代码列表。返回此 Locale 的语言代码。返回此区域的脚本,应为空字符串或 ISO 15924 4 位脚本代码之一。返回与此区域关联的 Unicode 区域属性集,如果没有属性,则返回空集。返回此区域定义的 Unicode 区域键集,如果此区域没有键,则返回空集。返回此区域的指定 Unicode 区域键关联的 Unicode 区域类型。返回此区域的变体代码。boolean
int
hashCode()
覆盖 hashCode。static Locale
lookup
(List<Locale.LanguageRange> priorityList, Collection<Locale> locales) 使用 RFC 4647 中定义的查找机制返回最佳匹配语言标签的Locale
实例。static String
lookupTag
(List<Locale.LanguageRange> priorityList, Collection<String> tags) 使用 RFC 4647 中定义的查找机制返回最佳匹配语言标签。static Locale
从语言代码获取区域。static Locale
从语言和国家获取区域。static Locale
从语言、国家和变体获取区域。static void
setDefault
(Locale newLocale) 设置此 Java 虚拟机实例的默认区域设置。static void
setDefault
(Locale.Category category, Locale newLocale) 设置此 Java 虚拟机实例的指定类别的默认区域设置。返回没有 扩展 的此Locale
的副本。返回表示此区域的规范的 IETF BCP 47 语言标签。final String
toString()
返回此Locale
对象的字符串表示形式,包括语言、国家、变体、脚本和扩展,如下所示:语言 + "_" + 国家 + "_" + (变体 + "_#" | "#") + 脚本 + "_" + 扩展 语言始终小写,国家始终大写,脚本始终首字母大写,扩展始终小写。
-
Field Details
-
ENGLISH
有用的语言常量。 -
FRENCH
有用的语言常量。 -
GERMAN
有用的语言常量。 -
ITALIAN
有用的语言常量。 -
JAPANESE
有用的语言常量。 -
KOREAN
有用的语言常量。 -
CHINESE
有用的语言常量。 -
SIMPLIFIED_CHINESE
有用的语言常量。 -
TRADITIONAL_CHINESE
有用的语言常量。 -
FRANCE
有用的国家常量。 -
GERMANY
有用的国家常量。 -
ITALY
有用的国家常量。 -
JAPAN
有用的国家常量。 -
KOREA
有用的国家常量。 -
UK
有用的国家常量。 -
US
有用的国家常量。 -
CANADA
有用的国家常量。 -
CANADA_FRENCH
有用的国家常量。 -
ROOT
根区域的有用常量。根区域是其语言、国家和变体均为空("")字符串的区域。这被视为所有区域的基础区域,并用作区域敏感操作的语言/国家中性区域。- 自 JDK 版本:
- 1.6
-
CHINA
有用的国家常量。 -
PRC
有用的国家常量。 -
TAIWAN
有用的国家常量。 -
PRIVATE_USE_EXTENSION
public static final char PRIVATE_USE_EXTENSION私有使用扩展('x')的键。- 自 JDK 版本:
- 1.7
- 参见:
-
UNICODE_LOCALE_EXTENSION
public static final char UNICODE_LOCALE_EXTENSIONUnicode 区域扩展('u')的键。- 自从:
- 1.7
- 参见:
-
-
Constructor Details
-
Locale
Deprecated.Locale constructors have been deprecated. See Obtaining a Locale for other options.从语言、国家和变体构造区域设置。此构造函数将语言值标准化为小写,将国家值标准化为大写。- 实现注意事项:
- 参数:
-
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标记。有关有效语言值,请参阅Locale
类描述。 -
country
- ISO 3166 alpha-2 国家代码或 UN M.49 数字-3 区域代码。有关有效国家值,请参阅Locale
类描述。 -
variant
- 用于指示Locale
变体的任意值。有关详细信息,请参阅Locale
类描述。 - 抛出:
-
NullPointerException
- 如果任何参数为 null。
-
Locale
Deprecated.Locale constructors have been deprecated. See Obtaining a Locale for other options.从语言和国家构造区域设置。此构造函数将语言值标准化为小写,将国家值标准化为大写。- 实现注意事项:
-
- 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码。
- 出于向后兼容性的原因,此构造函数不对输入进行任何语法检查。
- 参数:
-
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标记。有关有效语言值,请参阅Locale
类描述。 -
country
- ISO 3166 alpha-2 国家代码或 UN M.49 数字-3 区域代码。有关有效国家值,请参阅Locale
类描述。 - 抛出:
-
NullPointerException
- 如果任一参数为 null。
-
Locale
Deprecated.Locale constructors have been deprecated. See Obtaining a Locale for other options.从语言代码构造区域设置。此构造函数将语言值标准化为小写。- 实现注意事项:
-
- 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码。
- 出于向后兼容性的原因,此构造函数不对输入进行任何语法检查。
- 参数:
-
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标记。有关有效语言值,请参阅Locale
类描述。 - 抛出:
-
NullPointerException
- 如果参数为 null。 - 自从:
- 1.4
-
-
Method Details
-
of
从语言、国家和变体获取区域设置。此方法将语言值标准化为小写,将国家值标准化为大写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
进行完整的 BCP47 语法检查。 - 特殊处理两种情况("ja"、"JP"、"JP")和("th"、"TH"、"TH"),有关更多信息,请参见特殊情况。
- 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
-
language
- 语言代码。请参阅Locale
类描述中的语言值。 -
country
- 国家代码。请参阅Locale
类描述中的国家值。 -
variant
- 用于指示Locale
变体的任意值。请参阅Locale
类描述中的变体值。 - 返回:
-
一个
Locale
对象 - 抛出:
-
NullPointerException
- 如果任何参数为 null。 - 自从:
- 19
-
of
从语言和国家获取区域设置。此方法将语言值标准化为小写,将国家值标准化为大写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
进行完整的 BCP47 语法检查。 - 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
-
language
- 语言代码。请参阅Locale
类描述中的语言值。 -
country
- 国家代码。请参阅Locale
类描述中的国家值。 - 返回:
-
一个
Locale
对象 - 抛出:
-
NullPointerException
- 如果任一参数为 null。 - 自从:
- 19
-
of
从语言代码获取区域设置。此方法将语言值标准化为小写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
进行完整的 BCP47 语法检查。 - 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
-
language
- 语言代码。请参阅Locale
类描述中的语言值。 - 返回:
-
一个
Locale
对象 - 抛出:
-
NullPointerException
- 如果参数为 null。 - 自从:
- 19
-
getDefault
获取此 Java 虚拟机实例的默认区域设置的当前值。Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。可以使用
setDefault
方法更改默认区域设置。- 返回:
- 此 Java 虚拟机实例的默认区域设置
-
getDefault
获取此 Java 虚拟机实例的指定类别的默认区域设置的当前值。Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。可以使用 setDefault(Locale.Category, Locale) 方法更改默认区域设置。
- 参数:
-
category
- 要获取默认区域设置的指定类别 - 返回:
- 此 Java 虚拟机实例的指定类别的默认区域设置
- 抛出:
-
NullPointerException
- 如果类别为 null - 自从:
- 1.7
- 参见:
-
setDefault
设置此 Java 虚拟机实例的默认区域设置。这不会影响主机区域设置。如果存在安全管理器,则在更改默认区域设置之前将调用其
checkPermission
方法,该方法具有PropertyPermission("user.language", "write")
权限。Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。
由于更改默认区域设置可能会影响许多不同功能领域,因此只有在调用方准备好重新初始化在同一 Java 虚拟机中运行的区域设置代码时,才应使用此方法。
通过使用此方法设置默认区域设置,每个类别的默认区域设置也将设置为指定的默认区域设置。
- 参数:
-
newLocale
- 新的默认区域设置 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission
方法不允许该操作。 -
NullPointerException
- 如果newLocale
为 null - 参见:
-
setDefault
设置此Java虚拟机实例的指定类别的默认区域设置。这不会影响主机区域设置。如果存在安全管理器,则在更改默认区域设置之前,将调用其checkPermission方法,该方法具有PropertyPermission("user.language", "write")权限。
Java虚拟机在启动期间基于主机环境设置默认区域设置。如果没有明确指定区域设置,则许多区域设置敏感方法将使用它。
由于更改默认区域设置可能会影响许多不同功能领域,因此只有在调用方准备好重新初始化在同一Java虚拟机中运行的区域设置代码时,才应使用此方法。
- 参数:
-
category
- 要设置默认区域设置的指定类别 -
newLocale
- 新的默认区域设置 - 抛出:
-
SecurityException
- 如果存在安全管理器且其checkPermission方法不允许该操作。 -
NullPointerException
- 如果类别和/或newLocale为null - 自版本:
- 1.7
- 参见:
-
getAvailableLocales
返回已安装的区域设置数组。返回的数组表示Java运行时环境和已安装的LocaleServiceProvider
实现支持的区域设置的并集。返回的数组至少必须包含等于Locale.ROOT
和等于Locale.US
的Locale
实例。- 返回:
- 已安装的区域设置数组
-
availableLocales
返回已安装的区域设置流。返回的流表示Java运行时环境和已安装的LocaleServiceProvider
实现支持的区域设置的并集。返回的流至少必须包含等于Locale.ROOT
和等于Locale.US
的Locale
实例。- 实现注意:
-
与
getAvailableLocales()
不同,此方法不会创建区域设置数组的防御性副本。 - 返回:
- 已安装的区域设置流
- 自版本:
- 21
-
getISOCountries
返回ISO 3166中定义的所有2字母国家/地区代码的列表。可用于获取区域设置。此方法等效于使用type
为Locale.IsoCountryCode.PART1_ALPHA2
的getISOCountries(Locale.IsoCountryCode type)
。注意:
Locale
类还支持其他用于国家(地区)的代码,例如3字母数字UN M.49区域代码。因此,此方法返回的列表不包含可用于获取区域设置的所有有效代码。请注意,此方法不返回过时的2字母国家/地区代码。ISO3166-3代码指定了这些过时代码的国家代码,可以从使用
type
为Locale.IsoCountryCode.PART3
的getISOCountries(Locale.IsoCountryCode type)
检索。- 返回:
- 一个ISO 3166两字母国家/地区代码数组。
-
getISOCountries
返回指定类型的ISO3166国家代码的Set
。- 参数:
-
type
- 指定的ISO代码类型Locale.IsoCountryCode
。 - 返回:
-
指定类型的ISO3166国家代码的
Set
- 抛出:
-
NullPointerException
- 如果类型为null - 自版本:
- 9
- 参见:
-
getISOLanguages
返回ISO 639中定义的所有2字母语言代码的列表。可用于获取区域设置。注意:
- ISO 639不是一个稳定的标准—一些语言的代码已更改。此函数返回的列表包括代码已更改的语言的新旧代码。
Locale
类还支持长度最多为8个字符的语言代码。因此,此方法返回的列表不包含可用于获取区域设置的所有有效代码。
- 返回:
- 一个ISO 639两字母语言代码数组。
-
getLanguage
返回此区域设置的语言代码。- 实现注意:
- 此方法返回过时的ISO 639代码的新形式("iw","ji"和"in")。有关更多信息,请参见过时语言代码。
- 返回:
- 语言代码,如果未定义则为空字符串。
- 参见:
-
getScript
返回此区域设置的脚本,应为空字符串或ISO 15924的4字母脚本代码。第一个字母大写,其余小写,例如,'Latn','Cyrl'。- 返回:
- 脚本代码,如果未定义则为空字符串。
- 自版本:
- 1.7
- 参见:
-
getCountry
返回此区域设置的国家/地区代码,应为空字符串,大写ISO 3166的2字母代码或UN M.49的3位数字代码。- 返回:
- 国家/地区代码,如果未定义则为空字符串。
- 参见:
-
getVariant
返回此区域设置的变体代码。- 返回:
- 变体代码,如果未定义则为空字符串。
- 参见:
-
hasExtensions
public boolean hasExtensions()- 返回:
-
如果此
Locale
具有任何扩展,则返回true
- 自版本:
- 1.8
-
stripExtensions
- 返回:
-
不带扩展的此
Locale
的副本,如果this
没有扩展,则返回this
- 自版本:
- 1.8
-
getExtension
返回与指定键关联的扩展(或私有使用)值,如果与键关联的扩展不存在,则返回null。为了格式良好,键必须是[0-9A-Za-z]
之一。键不区分大小写,因此例如'z'和'Z'表示相同的扩展。- 参数:
-
key
- 扩展键 - 返回:
- 扩展,如果此区域设置未为指定键定义扩展,则为null。
- 抛出:
-
IllegalArgumentException
- 如果键格式不正确 - 自版本:
- 1.7
- 参见:
-
getExtensionKeys
返回与此区域设置关联的扩展键集,如果没有扩展,则返回空集。返回的集合是不可修改的。键都将是小写的。- 返回:
- 扩展键集,如果此区域设置没有扩展,则返回空集。
- 自版本:
- 1.7
-
getUnicodeLocaleAttributes
返回与此区域设置关联的Unicode区域设置属性集,如果没有属性,则返回空集。返回的集合是不可修改的。- 返回:
- 属性集。
- 自版本:
- 1.7
-
getUnicodeLocaleType
返回此区域设置的指定Unicode区域设置键的Unicode区域设置类型。对于未定义类型的键,返回空字符串。如果未定义键,则返回null。键不区分大小写。键必须是两个字母数字字符([0-9a-zA-Z]),否则将抛出IllegalArgumentException。- 参数:
-
key
- Unicode区域设置键 - 返回:
- 与键关联的Unicode区域设置类型,如果区域设置未定义键,则返回null。
- 抛出:
-
IllegalArgumentException
- 如果键格式不正确 -
NullPointerException
- 如果key
为null - 自版本:
- 1.7
-
getUnicodeLocaleKeys
返回此区域设置定义的Unicode区域设置键集,如果此区域设置没有键,则返回空集。返回的集合是不可变的。键都是小写的。- 返回:
- Unicode区域设置键集,如果此区域设置没有Unicode区域设置关键字,则返回空集。
- 自版本:
- 1.7
-
toString
返回此Locale
对象的字符串表示形式,包括语言、国家、变体、脚本和扩展,如下所示:语言 + "_" + 国家 + "_" + (变体 + "_#" | "#") + 脚本 + "_" + 扩展
语言始终为小写,国家始终为大写,脚本始终为首字母大写,扩展始终为小写。扩展和私有使用子标记将按照toLanguageTag()
中解释的规范顺序排列。当区域设置既没有脚本也没有扩展时,结果与Java 6及之前版本相同。
如果语言和国家字段都缺失,则此函数将返回空字符串,即使变体、脚本或扩展字段存在(不能只有变体的区域设置,变体必须与格式良好的语言或国家代码一起出现)。
如果脚本或扩展存在且变体缺失,则在“#”之前不会添加下划线。
此行为旨在支持调试并与先前对
toString
的使用兼容,该使用预期仅包含语言、国家和变体字段。要将区域设置表示为用于交换目的的字符串,请使用toLanguageTag()
。示例:
en
de_DE
_GB
en_US_WIN
de__POSIX
zh_CN_#Hans
zh_TW_#Hant_x-java
th_TH_TH_#u-nu-thai
-
toLanguageTag
返回表示此区域设置的规范IETF BCP 47语言标记。如果此
Locale
具有不符合IETF BCP 47语言标记语法要求的语言、国家或变体,则此方法将处理如下字段:语言:如果语言为空,或者不是格式良好的(例如"a"或"e2"),则将其输出为"und"(未确定)。
国家:如果国家不是格式良好的(例如"12"或"USA"),则将其省略。
变体:如果变体是格式良好的,则每个子段(由“-”或“_”分隔)将被输出为子标记。否则:
- 如果所有子段匹配
[0-9a-zA-Z]{1,8}
(例如"WIN"或"Oracle_JDK_Standard_Edition"),则第一个格式不正确的子段及其后的所有子段将附加到私有使用子标记。第一个附加的子标记将是"lvariant",然后是按顺序分隔的子段,用连字符分隔。例如,"x-lvariant-WIN","Oracle-x-lvariant-JDK-Standard-Edition"。 - 如果任何子段不匹配
[0-9a-zA-Z]{1,8}
,则将截断变体,并省略有问题的子段及其后的所有子段。如果剩余部分不为空,则将其如上述一样输出为私有使用子标记(即使剩余部分最终是格式良好的)。例如,"Solaris_isjustthecoolestthing"将输出为"x-lvariant-Solaris",而不是"solaris"。
特殊转换:Java支持一些旧的区域设置表示,包括已弃用的ISO语言代码,以确保兼容性。此方法执行以下转换:
- 已弃用的ISO语言代码"iw"、"ji"和"in"将分别转换为"he"、"yi"和"id"。
- 具有语言"no"、国家"NO"和变体"NY"的区域设置,表示挪威尼诺斯克(挪威),将转换为语言标记"nn-NO"。
注意:虽然此方法获得的语言标记是格式良好的(符合IETF BCP 47规范定义的语法要求),但不一定是有效的BCP 47语言标记。例如,
Locale.forLanguageTag("xx-YY").toLanguageTag();
- 返回:
- 表示区域设置的BCP47语言标记
- 自:
- 1.7
- 另请参阅:
- 如果所有子段匹配
-
caseFoldLanguageTag
返回一个大小写折叠的IETF BCP 47语言标记。此方法将语言标记格式化为符合RFC5646的2.1.1节语言标记格式规范的大小写约定。此格式定义为:所有子标记,包括扩展和私有使用子标记,均使用小写字母,有两个例外:既不出现在标记开头也不在单例之后的两字母和四字母子标记。这些两字母子标记全部大写(如标记"en-CA-x-ca"或"sgn-BE-FR")和四字母子标记首字母大写(如标记"az-Latn-x-latn")。由于旧标记(在RFC5646中定义为“祖传”)并非始终格式良好,此方法将简单地将旧标记大小写折叠以匹配各自
旧标记
表中指定的标记的确切大小写约定。特殊例外
为了保持与区分大小写的
variant
的一致性,此方法既不会对变体子标记进行大小写折叠,也不会对以lvariant
为前缀的私有使用子标记进行大小写折叠。例如,
String tag = "ja-kana-jp-x-lvariant-Oracle-JDK-Standard-Edition"; Locale.caseFoldLanguageTag(tag); // 返回 "ja-Kana-JP-x-lvariant-Oracle-JDK-Standard-Edition" String tag2 = "ja-kana-jp-x-Oracle-JDK-Standard-Edition"; Locale.caseFoldLanguageTag(tag2); // 返回 "ja-Kana-JP-x-oracle-jdk-standard-edition"
除了大小写折叠外,此方法不对标记本身进行任何修改。语言标记的大小写约定没有实际意义,只是建议,因为它与各种ISO标准对应,包括:ISO639-1、ISO15924和ISO3166-1。
由于大小写约定取决于某些子标记的位置,调用此方法的调用者应确保语言标记是格式良好的(符合RFC5646的2.1.语法)。
- 参数:
-
languageTag
- IETF BCP 47语言标记。 - 返回:
- 一个大小写折叠的IETF BCP 47语言标记
- 抛出:
-
IllformedLocaleException
- 如果languageTag
不是格式良好的 -
NullPointerException
- 如果languageTag
为null
- 自:
- 21
- 外部规范
-
forLanguageTag
返回指定的IETF BCP 47语言标记字符串的区域设置。如果指定的语言标记包含任何格式不正确的子标记,则将忽略第一个此类子标记和所有后续子标记。与
Locale.Builder.setLanguageTag(java.lang.String)
相比,在这种情况下会抛出异常。执行以下转换:
- 语言代码"und"映射为语言""。
- 语言代码"iw"、"ji"和"in"分别映射为"he"、"yi"和"id"。(这与Locale构造函数中进行的规范化相同。)有关更多信息,请参见传统语言代码。
- 如果私有使用子标记的一部分以"lvariant"为前缀,则将其移除并附加到结果区域设置的变体字段中(不进行大小写规范化)。如果然后为空,则丢弃私有使用子标记:
Locale loc; loc = Locale.forLanguageTag("en-US-x-lvariant-POSIX"); loc.getVariant(); // 返回"POSIX" loc.getExtension('x'); // 返回null loc = Locale.forLanguageTag("de-POSIX-x-URP-lvariant-Abc-Def"); loc.getVariant(); // 返回"POSIX_Abc_Def" loc.getExtension('x'); // 返回"urp"
- 当languageTag参数包含extlang子标记时,将使用第一个此类子标记作为语言,并忽略主语言子标记和其他extlang子标记:
Locale.forLanguageTag("ar-aao").getLanguage(); // 返回"aao" Locale.forLanguageTag("en-abc-def-us").toString(); // 返回"abc_US"
- 除了变体标记保持不变外,大小写被规范化。语言规范化为小写,脚本规范化为首字母大写,国家规范化为大写,扩展规范化为小写。
- 如果在处理后,区域设置将与ja_JP_JP或th_TH_TH完全匹配且没有扩展,则将添加适当的扩展,就好像调用了构造函数一样:
Locale.forLanguageTag("ja-JP-x-lvariant-JP").toLanguageTag(); // 返回"ja-JP-u-ca-japanese-x-lvariant-JP" Locale.forLanguageTag("th-TH-x-lvariant-TH").toLanguageTag(); // 返回"th-TH-u-nu-thai-x-lvariant-TH"
具有规范替代项的传统标记如下:
传统标记 现代替换项 art-lojban jbo i-ami ami i-bnn bnn i-hak hak i-klingon tlh i-lux lb i-navajo nv i-pwn pwn i-tao tao i-tay tay i-tsu tsu no-bok nb no-nyn nn sgn-BE-FR sfb sgn-BE-NL vgt sgn-CH-DE sgg zh-guoyu cmn zh-hakka hak zh-min-nan nan zh-xiang hsn 没有现代替换项的传统标记将转换如下:
传统标记 转换为 cel-gaulish xtg-x-cel-gaulish en-GB-oed en-GB-x-oed i-default en-x-i-default i-enochian und-x-i-enochian i-mingo see-x-i-mingo zh-min nan-x-zh-min 有关所有传统标记的列表,请参阅IANA语言子标记注册表(搜索"Type: grandfathered")。
注意:不能保证
toLanguageTag
和forLanguageTag
之间的往返。- 参数:
-
languageTag
- 语言标记 - 返回:
- 最能代表语言标记的区域设置。
- 抛出:
-
NullPointerException
- 如果languageTag
为null
- 自:
- 1.7
- 参见:
-
getISO3Language
返回此区域设置语言的三个字母缩写。如果语言与ISO 639-1两字母代码匹配,则返回相应的ISO 639-2/T三字母小写代码。ISO 639-2语言代码可以在线找到,参见"Codes for the Representation of Names of Languages Part 2: Alpha-3 Code"。如果区域设置指定了三字母语言,则原样返回语言。如果区域设置未指定语言,则返回空字符串。- 返回:
- 此区域设置语言的三个字母缩写
- 抛出:
-
MissingResourceException
- 如果此区域设置的三字母语言缩写不可用。
-
getISO3Country
返回此区域设置国家的三个字母缩写。如果国家与ISO 3166-1 alpha-2代码匹配,则返回相应的ISO 3166-1 alpha-3大写代码。如果区域设置未指定国家,则将返回空字符串。ISO 3166-1代码可以在线找到。
- 返回:
- 此区域设置国家的三个字母缩写
- 抛出:
-
MissingResourceException
- 如果此区域设置的三字母国家缩写不可用。
-
getDisplayLanguage
返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将根据默认的DISPLAY
区域设置进行本地化。例如,如果区域设置为fr_FR且默认的DISPLAY
区域设置为en_US,则getDisplayLanguage()将返回"French";如果区域设置为en_US且默认的DISPLAY
区域设置为fr_FR,则getDisplayLanguage()将返回"anglais"。如果返回的名称无法根据默认的DISPLAY
区域设置进行本地化(例如,我们没有克罗地亚语的日语名称),此函数将退回到英语名称,并将ISO代码作为最后一手值。如果区域设置未指定语言,则此函数将返回空字符串。- 返回:
- 显示语言的名称。
-
getDisplayLanguage
返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将根据inLocale进行本地化。例如,如果区域设置为fr_FR且inLocale为en_US,则getDisplayLanguage()将返回"French";如果区域设置为en_US且inLocale为fr_FR,则getDisplayLanguage()将返回"anglais"。如果返回的名称无法根据inLocale进行本地化(例如,我们没有克罗地亚语的日语名称),此函数将退回到英语名称,最后使用ISO代码作为最后一手值。如果区域设置未指定语言,则此函数将返回空字符串。- 参数:
-
inLocale
- 要检索显示语言的区域设置。 - 返回:
- 适合给定区域设置的显示语言的名称。
- 抛出:
-
NullPointerException
- 如果inLocale
为null
-
getDisplayScript
返回适合向用户显示的区域设置脚本的名称。如果可能,名称将根据默认的DISPLAY
区域设置进行本地化。如果此区域设置未指定脚本代码,则返回空字符串。- 返回:
-
当前默认
DISPLAY
区域设置的脚本代码的显示名称 - 自:
- 1.7
-
getDisplayScript
返回适合向用户显示的区域设置脚本的名称。如果可能,名称将根据给定的区域设置进行本地化。如果此区域设置未指定脚本代码,则返回空字符串。- 参数:
-
inLocale
- 要检索显示脚本的区域设置。 - 返回:
-
当前默认
DISPLAY
区域设置的脚本代码的显示名称 - 抛出:
-
NullPointerException
- 如果inLocale
为null
- 自版本:
- 1.7
-
getDisplayCountry
返回适合向用户显示的区域设置的国家名称。如果可能,返回的名称将根据默认DISPLAY
区域设置进行本地化。例如,如果区域设置为fr_FR,而默认DISPLAY
区域设置为en_US,则getDisplayCountry()将返回"France";如果区域设置为en_US,而默认DISPLAY
区域设置为fr_FR,则getDisplayCountry()将返回"Etats-Unis"。如果返回的名称无法根据默认DISPLAY
区域设置进行本地化(例如,我们没有克罗地亚的日语名称),此函数将回退到英文名称,并将ISO代码作为最后的值。如果区域设置未指定国家,则此函数将返回空字符串。- 返回:
- 适合区域设置的国家名称。
-
getDisplayCountry
返回适合向用户显示的区域设置的国家名称。如果可能,返回的名称将根据inLocale进行本地化。例如,如果区域设置为fr_FR,而inLocale为en_US,则getDisplayCountry()将返回"France";如果区域设置为en_US,而inLocale为fr_FR,则getDisplayCountry()将返回"Etats-Unis"。如果返回的名称无法根据inLocale进行本地化(例如,我们没有克罗地亚的日语名称),此函数将回退到英文名称,并最终使用ISO代码作为最后的值。如果区域设置未指定国家,则此函数将返回空字符串。- 参数:
-
inLocale
- 要检索显示国家的区域设置。 - 返回:
- 适合给定区域设置的国家名称。
- 抛出:
-
NullPointerException
- 如果inLocale
为null
-
getDisplayVariant
返回适合向用户显示的区域设置的变体代码的名称。如果可能,名称将根据默认DISPLAY
区域设置进行本地化。如果区域设置未指定变体代码,则此函数将返回空字符串。- 返回:
- 适合区域设置的显示变体代码的名称。
-
getDisplayVariant
返回适合向用户显示的区域设置的变体代码的名称。如果可能,名称将根据inLocale进行本地化。如果区域设置未指定变体代码,则此函数将返回空字符串。- 参数:
-
inLocale
- 要检索显示变体代码的区域设置。 - 返回:
- 适合给定区域设置的显示变体代码的名称。
- 抛出:
-
NullPointerException
- 如果inLocale
为null
-
getDisplayName
返回适合向用户显示的区域设置的名称。这将是由getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant()和可选的Unicode扩展组装成单个字符串的值。非空值按顺序使用,括号中的第二个及后续名称用括号括起来。例如:语言(脚本,国家,变体(,扩展)*)
取决于区域设置中指定的字段。上述括号中的字段分隔符,表示为逗号字符,可能会根据区域设置进行本地化。如果语言、脚本、国家和变体字段都为空,则此函数将返回空字符串。
语言(国家(,扩展)*)
语言(变体(,扩展)*)
脚本(国家(,扩展)*)
国家(扩展)*
- 返回:
- 适合显示的区域设置的名称。
-
getDisplayName
返回适合向用户显示的区域设置的名称。这将是由getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant()和可选的Unicode扩展组装成单个字符串的值。非空值按顺序使用,括号中的第二个及后续名称用括号括起来。例如:语言(脚本,国家,变体(,扩展)*)
取决于区域设置中指定的字段。上述括号中的字段分隔符,表示为逗号字符,可能会根据区域设置进行本地化。如果语言、脚本、国家和变体字段都为空,则此函数将返回空字符串。
语言(国家(,扩展)*)
语言(变体(,扩展)*)
脚本(国家(,扩展)*)
国家(扩展)*
- 参数:
-
inLocale
- 要检索显示名称的区域设置。 - 返回:
- 适合显示的区域设置的名称。
- 抛出:
-
NullPointerException
- 如果inLocale
为null
-
clone
覆盖Cloneable。 -
hashCode
public int hashCode()覆盖hashCode。由于区域设置经常用于哈希表中,为了提高速度,缓存值。 -
equals
如果此Locale等于另一个对象,则返回true。Locale被视为与具有相同语言、脚本、国家、变体和扩展的另一个Locale相等,并且与所有其他对象不相等。 -
filter
public static List<Locale> filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales, Locale.FilteringMode mode) 使用RFC 4647中定义的过滤机制返回匹配的Locale
实例列表。对给定的locales
进行的此过滤操作确保仅返回唯一匹配的区域设置。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级或权重按降序排序 -
locales
- 用于匹配的Locale
实例 -
mode
- 过滤模式 - 返回:
-
匹配语言标记的
Locale
实例列表,按照优先级或权重按降序排序,如果没有匹配项则返回空列表。列表是可修改的。 - 抛出:
-
NullPointerException
- 如果priorityList
或locales
为null
-
IllegalArgumentException
- 如果在指定Locale.FilteringMode.REJECT_EXTENDED_RANGES
时给定列表中包含一个或多个扩展语言范围 - 自版本:
- 1.8
-
filter
public static List<Locale> filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales) 使用RFC 4647中定义的过滤机制返回匹配的Locale
实例列表。当mode
为Locale.FilteringMode.AUTOSELECT_FILTERING
时,这等效于filter(List, Collection, FilteringMode)
。对给定的locales
进行的此过滤操作确保仅返回唯一匹配的区域设置。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标记根据优先级或权重按降序排序 -
locales
- 用于匹配的Locale
实例 - 返回:
-
匹配语言标记的
Locale
实例列表,按照优先级或权重按降序排序,如果没有匹配项则返回空列表。列表是可修改的。 - 抛出:
-
NullPointerException
- 如果priorityList
或locales
为null
- 自版本:
- 1.8
-
filterTags
public static List<String> filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags, Locale.FilteringMode mode) 返回使用RFC 4647中定义的基本过滤机制返回匹配语言标签列表。对给定的tags
进行的这种过滤操作确保只返回保留大小写的唯一匹配标签。如果存在大小写不同的重复匹配标签,则返回保留大小写的第一个匹配标签。例如,如果在给定的tags
中首先检查"de-ch"以进行匹配,则会返回"de-ch",而不是重复匹配标签"de-ch"和"de-CH"中的任何一个。请注意,如果给定的tags
是无序的Collection
,则返回的重复标签中的匹配标签可能会发生变化,这取决于Collection
的实现方式。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序 -
tags
- 语言标签 -
mode
- 过滤模式 - 返回:
- 根据优先级或权重按降序排序的匹配语言标签列表,如果没有匹配项则返回空列表。该列表是可修改的。
- 抛出:
-
NullPointerException
- 如果priorityList
或tags
为null
-
IllegalArgumentException
- 如果在指定Locale.FilteringMode.REJECT_EXTENDED_RANGES
时给定列表中包含一个或多个扩展语言范围 - 自版本:
- 1.8
-
filterTags
public static List<String> filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags) 返回使用RFC 4647中定义的基本过滤机制返回匹配语言标签列表。当mode
为Locale.FilteringMode.AUTOSELECT_FILTERING
时,这等同于filterTags(List, Collection, FilteringMode)
。对给定的tags
进行的这种过滤操作确保只返回保留大小写的唯一匹配标签。如果存在大小写不同的重复匹配标签,则返回保留大小写的第一个匹配标签。例如,如果在给定的tags
中首先检查"de-ch"以进行匹配,则会返回"de-ch",而不是重复匹配标签"de-ch"和"de-CH"中的任何一个。请注意,如果给定的tags
是无序的Collection
,则返回的重复标签中的匹配标签可能会发生变化,这取决于Collection
的实现方式。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序 -
tags
- 语言标签 - 返回:
- 根据优先级或权重按降序排序的匹配语言标签列表,如果没有匹配项则返回空列表。该列表是可修改的。
- 抛出:
-
NullPointerException
- 如果priorityList
或tags
为null
- 自版本:
- 1.8
-
lookup
返回使用RFC 4647中定义的查找机制返回最佳匹配语言标签的Locale
实例。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序 -
locales
- 用于匹配的Locale
实例 - 返回:
-
基于优先级或权重选择的最佳匹配
Locale
实例,如果没有匹配项则返回null
。 - 抛出:
-
NullPointerException
- 如果priorityList
或locales
为null
- 自版本:
- 1.8
-
lookupTag
返回使用RFC 4647中定义的查找机制返回最佳匹配语言标签。- 参数:
-
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序 -
tags
- 用于匹配的语言标签 - 返回:
-
基于优先级或权重选择的最佳匹配语言标签,如果没有匹配项则返回
null
。 - 抛出:
-
NullPointerException
- 如果priorityList
或tags
为null
- 自版本:
- 1.8
-