- 所有已实现的接口:
Serializable
,Cloneable
Locale
对象表示特定的地理、政治或文化区域。需要 Locale
执行其任务的操作称为 locale-sensitive,并使用 Locale
为用户定制信息。例如,显示数字是一种区域设置敏感操作——数字的格式应根据用户所在国家、地区或文化的习惯和惯例。
Locale
类实现了 IETF BCP 47,它由 RFC 4647“语言标签的匹配” 和 RFC 5646 “识别语言的标签” 组成,支持 LDML(UTS#35,“Unicode 区域设置数据标记语言”)BCP 47 兼容扩展,用于区域设置数据交换。
Locale
对象在逻辑上由以下描述的字段组成。
- 语言
-
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”(孔卡尼语)
- 脚本
-
ISO 15924 alpha-4 脚本代码。您可以在 IANA 语言子标签注册表中找到有效脚本代码的完整列表(搜索“类型:脚本”)。脚本字段不区分大小写,但
Locale
始终规范化为标题大小写(第一个字母大写,其余字母小写)。 -
格式正确的脚本值的格式为
[a-zA-Z]{4}
- 示例:“Latn”(拉丁文)、“Cyrl”(西里尔文)
- 国家(地区)
-
ISO 3166 alpha-2 国家代码或 UN M.49 numeric-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)*
whereSUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}
。 (注意:BCP 47 只使用连字符('-')作为分隔符,这样比较宽松)。 - 示例:“polyton”(希腊语 Polytonic)、“POSIX”
- 扩展名
-
从单个字符键到字符串值的映射,指示除语言识别之外的扩展。
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' 允许单字符子标签)。 - 示例:key="u"/value="ca-japanese"(日本日历),key="x"/value="java-1-7"
Locale
类不提供任何验证功能。 Builder
仅检查单个字段是否满足语法要求(格式正确),但不验证值本身。有关详细信息,请参阅 Locale.Builder
。
Unicode locale/语言扩展
UTS#35,“Unicode Locale Data Markup Language”定义了可选的属性和关键字来重写或改进与区域相关的默认行为。关键字由一对键和类型表示。例如,“nu-thai”表示应该使用泰国本地数字(值:“thai”)来格式化数字(key:“nu”)。
使用扩展键“u”(UNICODE_LOCALE_EXTENSION
)将关键字映射到 BCP 47 扩展值。上面的例子“nu-thai”变成了扩展名“u-nu-thai”。
因此,当 Locale
对象包含 Unicode locale属性和关键字时,getExtension(UNICODE_LOCALE_EXTENSION)
将返回表示此信息的字符串,例如“nu-thai”。 Locale
类还提供了 getUnicodeLocaleAttributes()
、getUnicodeLocaleKeys()
和 getUnicodeLocaleType(java.lang.String)
,它们允许您直接访问 Unicode locale属性和键/类型对。当表示为字符串时,Unicode Locale Extension 按字母顺序列出属性,然后是键/类型序列,其中键按字母顺序列出(在定义类型时,包含键类型的子标签的顺序是固定的)
格式正确的区域设置键的格式为 [0-9a-zA-Z]{2}
。格式正确的locale类型具有 "" | [0-9a-zA-Z]{3,8} ('-' [0-9a-zA-Z]{3,8})*
形式(它可以是空的,或者是一系列长度为 3-8 个字母数字的子标签)。格式正确的locale属性具有 [0-9a-zA-Z]{3,8}
形式(它是与locale类型子标签具有相同形式的单个子标签)。
Unicode locale扩展指定locale敏感服务中的可选行为。尽管 LDML 规范定义了各种键和值,但 Java 运行时环境中实际的locale敏感服务实现可能不支持任何特定的 Unicode locale属性或键/类型对。
获取locale
有几种方法可以获得 Locale
对象。
建设者
使用 Locale.Builder
您可以构造一个符合 BCP 47 语法的 Locale
对象。
工厂方法
forLanguageTag(java.lang.String)
方法为格式正确的 BCP 47 语言标记获取 Locale
对象。 of(String, String, String)
方法及其重载从上面定义的给定 language
、country
和/或 variant
获得一个 Locale
对象。
Locale 常量
Locale
类提供了许多方便的常量,您可以使用它们来获取常用locale的 Locale
对象。例如,Locale.US
是美国的 Locale
对象。
locale匹配
如果一个应用程序或系统是国际化的,并为多个locale提供本地化资源,它有时需要找到一个或多个符合每个用户特定偏好的locale(或语言标签)。请注意,在此locale匹配文档中,术语“语言标签”可与“locale”互换使用。
为了将用户的首选locale与一组语言标签相匹配,RFC 4647 语言标签匹配 定义了两种机制:过滤和查找。 Filtering 用于获取所有匹配的locale,而 lookup 用于选择最佳匹配的locale。匹配不区分大小写。这些匹配机制在以下部分中描述。
用户的偏好称为Language Priority List,并表示为语言范围列表。在句法上有两种类型的语言范围:基本和扩展。有关详细信息,请参阅 Locale.LanguageRange
。
过滤
过滤操作返回所有匹配的语言标签。它在 RFC 4647 中定义如下:“在过滤中,每个语言范围代表可接受匹配的最不具体的语言标签(即子标签数量最少的语言标签)。匹配集中的所有语言标签标签的子标签数量将等于或大于语言范围。语言范围内的每个非通配符子标签都将出现在每个匹配的语言标签中。”
有两种类型的过滤:针对基本语言范围的过滤(称为“基本过滤”)和针对扩展语言范围的过滤(称为“扩展过滤”)。它们可能会根据给定语言优先级列表中包含何种语言范围而返回不同的结果。 Locale.FilteringMode
是指定如何进行过滤的参数。
Lookup
查找操作返回最匹配的语言标签。它在 RFC 4647 中定义如下:“与过滤相比,每个语言范围代表可接受匹配的最具体的标签。根据用户的优先级,找到的第一个匹配标签被认为是最接近的匹配项,并且是项目回。”
例如,如果语言优先级列表包含两个语言范围,"zh-Hant-TW"
和 "en-US"
,按优先顺序排列,查找方法会逐步搜索下面的语言标签,以找到最匹配的语言标签。
如果存在与上述语言范围完全匹配的语言标签,则返回该语言标签。1. zh-Hant-TW 2. zh-Hant 3. zh 4. en-US 5. en
"*"
为特殊语言范围,查找时忽略。
如果由于子标签 '*'
包含在语言范围内而导致多个语言标签匹配,则 Iterator
在 Collection
语言标签上返回的第一个匹配语言标签将被视为最佳匹配语言标签。
Locale的使用
获得 Locale
后,您可以查询它以获取有关其自身的信息。使用 getCountry
获取国家(或地区)代码,使用 getLanguage
获取语言代码。您可以使用 getDisplayCountry
获取适合向用户显示的国家名称。同样,您可以使用 getDisplayLanguage
获取适合向用户显示的语言名称。有趣的是,getDisplayXXX
方法本身对区域设置敏感,并且有两个版本:一个使用默认的 DISPLAY
区域设置,另一个使用指定的区域设置作为参数。
Java 平台提供了许多执行区域设置敏感操作的类。例如,NumberFormat
类以区域设置敏感的方式格式化数字、货币和百分比。 NumberFormat
等类有几个方便的方法来创建该类型的默认对象。例如,NumberFormat
类提供了这三种用于创建默认 NumberFormat
对象的便捷方法:
这些方法中的每一种都有两种变体;一个有明确的locale,一个没有;后者使用默认的NumberFormat.getInstance() NumberFormat.getCurrencyInstance() NumberFormat.getPercentInstance()
FORMAT
locale:
NumberFormat.getInstance(myLocale) NumberFormat.getCurrencyInstance(myLocale) NumberFormat.getPercentInstance(myLocale)
Locale
是用于识别您想要获取的对象类型 (NumberFormat
) 的机制。locale是 just 一种识别对象的机制, not 是对象本身的容器。
兼容性
为了保持兼容性,Locale 的构造函数保留了它们在 Java Runtime Environment 版本 1.7 之前的行为。 toString
方法在很大程度上也是如此。因此 Locale 对象可以继续使用。特别是,将 toString 的输出解析为语言、国家和变体字段的客户端可以继续这样做(尽管强烈建议不要这样做),尽管如果存在脚本或扩展,变体字段将包含其他信息。
此外,BCP 47 强加了 Locale 的构造函数没有强加的语法限制。这意味着某些 Locales 和 BCP 47 语言标签之间的转换不能在不丢失信息的情况下进行。因此 toLanguageTag
不能表示其语言、国家或变体不符合 BCP 47 的locale的状态。
由于这些问题,建议客户远离构建不符合要求的locale,而改用 forLanguageTag
和 Locale.Builder
API。需要完整locale的字符串表示的客户端可以始终依赖 toLanguageTag
来达到此目的。
特别案例
出于兼容性原因,两个不符合要求的locale被视为特殊情况。这些都是ja_JP_JP
和th_TH_TH
.这些在 BCP 47 中格式错误,因为变体太短。为了便于迁移到 BCP 47,在施工期间对这些进行了特殊处理。这两种情况(并且只有这些)导致构造方法生成扩展,所有其他值的行为与 Java 7 之前的行为完全相同。
Java 已使用 ja_JP_JP
来表示在日本与日本皇历一起使用的日语。现在可以使用 Unicode locale扩展来表示,方法是指定 Unicode locale键 ca
(表示“日历”)和类型 japanese
。当使用参数“ja”、“JP”、“JP”调用 Locale 构造函数时,会自动添加扩展名“u-ca-japanese”。
Java 已使用 th_TH_TH
来表示泰国使用的泰语以及泰语数字。这现在也可以使用 Unicode locale扩展来表示,方法是指定 Unicode locale键 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之间的等价性,无论使用哪种代码或 API 来构造它们。 Java 的默认资源包查找机制也实现了这种map,因此可以使用任一约定来命名资源,请参阅 ResourceBundle.Control
。
三字母语言/国家(地区)代码
Locale 构造方法总是指定语言和国家参数的长度为两个字符,尽管实际上它们接受任何长度。规范现已放宽,允许两到八个字符的语言代码和两到三个字符的国家(地区)代码,特别是 IANA 语言子标签注册表中指定的三字母语言代码和三位区域代码.为了兼容性,实现仍然没有施加长度限制。
- 自从:
- 1.1
- 参见:
-
内部类总结
内部类修饰符和类型类描述static final class
Builder
用于根据 setter 配置的值构建Locale
的实例。static enum
区域设置类别的枚举。static enum
此枚举提供常量来选择区域设置匹配的过滤模式。static enum
用于指定 ISO 3166 中定义的类型的枚举。static final class
此类表示在 RFC 4647 语言标签匹配 中定义的 Language Range。 -
字段摘要
字段修饰符和类型Field描述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 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
对国家/地区有用的常量。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述clone()
重写可克隆。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[]
返回所有已安装locale的数组。返回此区域设置的国家/地区代码,它应该是空字符串、大写 ISO 3166 2 字母代码或 UN M.49 3 位代码。static Locale
获取此 Java 虚拟机实例的默认locale的当前值。static Locale
getDefault
(Locale.Category category) 获取此 Java 虚拟机实例的指定类别的默认locale的当前值。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。返回与此locale关联的扩展键集,如果没有扩展,则返回空集。返回此locale所在国家/地区的三个字母的缩写。返回此区域设置语言的三个字母缩写。static String[]
返回 ISO 3166 中定义的所有 2 字母国家/地区代码的列表。返回指定类型的Set
ISO3166 国家/地区代码。static String[]
返回 ISO 639 中定义的所有 2 字母语言代码的列表。返回此 Locale 的语言代码。返回此locale的脚本,它应该是空字符串或 ISO 15924 4 字母脚本代码。返回与此locale关联的 unicode locale属性集,如果没有属性,则返回空集。返回此locale定义的 Unicode locale键集,如果此locale没有,则返回空集。返回与此locale的指定 Unicode locale键关联的 Unicode locale类型。返回此locale的变体代码。boolean
int
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
从语言代码中获取locale。static Locale
从语言和国家/地区获取locale。static Locale
从语言、国家和变体中获取locale。static void
setDefault
(Locale newLocale) 设置此 Java 虚拟机实例的默认locale。static void
setDefault
(Locale.Category category, Locale newLocale) 为此 Java 虚拟机实例设置指定类别的默认locale。返回此Locale
的副本,不带 扩展名。返回表示此locale的格式正确的 IETF BCP 47 语言标记。final String
toString()
返回此Locale
对象的字符串表示,由语言、国家、变体、脚本和扩展组成,如下所示:语言 + "_" + 国家 + "_" + (变体 + "_#" | "#") + 脚本+ "_" + extensions 语言始终为小写,国家/地区始终为大写,文字始终为标题,扩展名始终为小写。
-
字段详细信息
-
ENGLISH
有用的语言常量。 -
FRENCH
有用的语言常量。 -
GERMAN
有用的语言常量。 -
ITALIAN
有用的语言常量。 -
JAPANESE
有用的语言常量。 -
KOREAN
有用的语言常量。 -
CHINESE
有用的语言常量。 -
SIMPLIFIED_CHINESE
有用的语言常量。 -
TRADITIONAL_CHINESE
有用的语言常量。 -
FRANCE
对国家/地区有用的常量。 -
GERMANY
对国家/地区有用的常量。 -
ITALY
对国家/地区有用的常量。 -
JAPAN
对国家/地区有用的常量。 -
KOREA
对国家/地区有用的常量。 -
UK
对国家/地区有用的常量。 -
US
对国家/地区有用的常量。 -
CANADA
对国家/地区有用的常量。 -
CANADA_FRENCH
对国家/地区有用的常量。 -
ROOT
根区域设置的有用常量。根locale是其语言、国家和变体为空 ("") 字符串的locale。这被视为所有locale的基本locale,并用作locale敏感操作的语言/国家中性locale。- 自从:
- 1.6
-
CHINA
对国家/地区有用的常量。 -
PRC
对国家/地区有用的常量。 -
TAIWAN
对国家/地区有用的常量。 -
PRIVATE_USE_EXTENSION
public static final char PRIVATE_USE_EXTENSION私人使用扩展('x')的密钥。- 自从:
- 1.7
- 参见:
-
UNICODE_LOCALE_EXTENSION
public static final char UNICODE_LOCALE_EXTENSIONUnicode 区域设置扩展('u')的键。- 自从:
- 1.7
- 参见:
-
-
构造方法详细信息
-
Locale
已弃用。区域设置构造函数已被弃用。有关其他选项,请参阅 获取locale。从语言、国家和变体构建locale。此构造方法将语言值规范化为小写,将国家/地区值规范化为大写。- 实现注意事项:
- 参数:
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标签。请参阅有关有效语言值的Locale
类描述。country
- ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区号。请参阅有关有效国家/地区值的Locale
类描述。variant
- 用于指示Locale
变体的任意值。有关详细信息,请参阅Locale
类描述。- 抛出:
NullPointerException
- 如果任何参数为空则抛出。
-
Locale
已弃用。区域设置构造函数已被弃用。有关其他选项,请参阅 获取locale。从语言和国家构建locale。此构造方法将语言值规范化为小写,将国家/地区值规范化为大写。- 实现注意事项:
-
- 过时的 ISO 639 代码(“iw”、“ji”和“in”)映射到它们的当前形式。有关详细信息,请参阅 遗留语言代码。
- 出于向后兼容的原因,此构造方法不对输入进行任何语法检查。
- 参数:
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标签。请参阅有关有效语言值的Locale
类描述。country
- ISO 3166 alpha-2 国家代码或 UN M.49 numeric-3 区号。请参阅有关有效国家/地区值的Locale
类描述。- 抛出:
NullPointerException
- 如果任一参数为空则抛出。
-
Locale
已弃用。区域设置构造函数已被弃用。有关其他选项,请参阅 获取locale。从语言代码构建locale。此构造方法将语言值规范化为小写。- 实现注意事项:
-
- 过时的 ISO 639 代码(“iw”、“ji”和“in”)映射到它们的当前形式。有关详细信息,请参阅 遗留语言代码。
- 出于向后兼容的原因,此构造方法不对输入进行任何语法检查。
- 参数:
language
- ISO 639 alpha-2 或 alpha-3 语言代码,或长度最多为 8 个字符的语言子标签。请参阅有关有效语言值的Locale
类描述。- 抛出:
NullPointerException
- 如果参数为空则抛出。- 自从:
- 1.4
-
-
方法详情
-
of
从语言、国家和变体中获取locale。此方法将语言值规范化为小写,将国家/地区值规范化为大写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
对 BCP47 进行完整的语法检查。 - 这两种情况 ("ja", "JP", "JP") 和 ("th", "TH", "TH") 被特殊处理,请参阅 特别案例 了解更多信息。
- 过时的 ISO 639 代码(“iw”、“ji”和“in”)映射到它们的当前形式。有关详细信息,请参阅 遗留语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
language
- 语言代码。请参阅 语言 值的Locale
类描述。country
- 国家代码。请参阅 国家 值的Locale
类描述。variant
- 用于指示Locale
变体的任意值。请参阅 variant 值的Locale
类描述。- 返回:
-
一个
Locale
对象 - 抛出:
NullPointerException
- 如果任何参数为空则抛出。- 自从:
- 19
-
of
从语言和国家/地区获取locale。此方法将语言值规范化为小写,将国家/地区值规范化为大写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
对 BCP47 进行完整的语法检查。 - 过时的 ISO 639 代码(“iw”、“ji”和“in”)映射到它们的当前形式。有关详细信息,请参阅 遗留语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
language
- 语言代码。请参阅 语言 值的Locale
类描述。country
- 国家代码。请参阅 国家 值的Locale
类描述。- 返回:
-
一个
Locale
对象 - 抛出:
NullPointerException
- 如果任一参数为空则抛出。- 自从:
- 19
-
of
从语言代码中获取locale。此方法将语言值规范化为小写。- 实现注意事项:
-
- 此方法不对输入进行任何语法检查。使用
Locale.Builder
对 BCP47 进行完整的语法检查。 - 过时的 ISO 639 代码(“iw”、“ji”和“in”)映射到它们的当前形式。有关详细信息,请参阅 遗留语言代码。
- 此方法不对输入进行任何语法检查。使用
- 参数:
language
- 语言代码。请参阅 语言 值的Locale
类描述。- 返回:
-
一个
Locale
对象 - 抛出:
NullPointerException
- 如果参数为空则抛出。- 自从:
- 19
-
getDefault
获取此 Java 虚拟机实例的默认locale的当前值。Java 虚拟机在启动期间根据主机环境设置默认locale。如果没有明确指定locale,它会被许多locale敏感的方法使用。可以使用
setDefault
方法更改它。- 返回:
- 此 Java 虚拟机实例的默认locale
-
getDefault
获取此 Java 虚拟机实例的指定类别的默认locale的当前值。Java 虚拟机在启动期间根据主机环境设置默认locale。如果没有明确指定locale,它会被许多locale敏感的方法使用。可以使用 setDefault(Locale.Category, Locale) 方法更改它。
- 参数:
category
- 指定类别以获取默认locale- 返回:
- 此 Java 虚拟机实例的指定类别的默认locale
- 抛出:
NullPointerException
- 如果类别为空- 自从:
- 1.7
- 参见:
-
setDefault
设置此 Java 虚拟机实例的默认locale。这不会影响主机区域设置。如果有安全管理器,则在更改默认区域设置之前,将使用
PropertyPermission("user.language", "write")
权限调用其checkPermission
方法。Java 虚拟机在启动期间根据主机环境设置默认locale。如果没有明确指定locale,它会被许多locale敏感的方法使用。
由于更改默认locale可能会影响许多不同的功能区域,因此仅当调用者准备重新初始化在同一 Java 虚拟机中运行的locale敏感代码时才应使用此方法。
通过使用此方法设置默认区域设置,每个类别的所有默认区域设置也将设置为指定的默认区域设置。
- 参数:
newLocale
- 新的默认locale- 抛出:
SecurityException
- 如果安全管理器存在且其checkPermission
方法不允许该操作。NullPointerException
- 如果newLocale
为空- 参见:
-
setDefault
为此 Java 虚拟机实例设置指定类别的默认locale。这不会影响主机区域设置。如果有安全管理器,则在更改默认locale之前,将使用 PropertyPermission("user.language", "write") 权限调用其 checkPermission 方法。
Java 虚拟机在启动期间根据主机环境设置默认locale。如果没有明确指定locale,它会被许多locale敏感的方法使用。
由于更改默认locale可能会影响许多不同的功能区域,因此仅当调用者准备重新初始化在同一 Java 虚拟机中运行的locale敏感代码时才应使用此方法。
- 参数:
category
- 指定类别设置默认localenewLocale
- 新的默认locale- 抛出:
SecurityException
- 如果安全管理器存在并且其 checkPermission 方法不允许该操作。NullPointerException
- 如果类别和/或 newLocale 为空- 自从:
- 1.7
- 参见:
-
getAvailableLocales
返回所有已安装locale的数组。返回的数组表示 Java 运行时环境和已安装的LocaleServiceProvider
实现支持的locale的联合。至少,返回的数组必须包含一个等于Locale.ROOT
的Locale
实例和一个等于Locale.US
的Locale
实例。- 返回:
- 一组已安装的locale。
-
getISOCountries
返回 ISO 3166 中定义的所有 2 字母国家/地区代码的列表。可用于获取 Locales。此方法等效于getISOCountries(Locale.IsoCountryCode type)
和type
Locale.IsoCountryCode.PART1_ALPHA2
。笔记:
Locale
类还支持国家(地区)的其他代码,例如 3 字母数字 UN M.49 区号。因此,此方法返回的列表不包含可用于获取 Locales 的所有有效代码。请注意,此方法不会返回过时的 2 字母国家/地区代码。可以从
getISOCountries(Locale.IsoCountryCode type)
和type
Locale.IsoCountryCode.PART3
中检索为这些过时代码指定国家代码的 ISO3166-3 代码。- 返回:
- 一组 ISO 3166 两个字母的国家/地区代码。
-
getISOCountries
返回指定类型的Set
ISO3166 国家/地区代码。- 参数:
type
-Locale.IsoCountryCode
指定的 ISO 代码类型。- 返回:
-
a
Set
指定类型的 ISO 国家代码。 - 抛出:
NullPointerException
- 如果类型为空- 自从:
- 9
- 参见:
-
getISOLanguages
返回 ISO 639 中定义的所有 2 字母语言代码的列表。可用于获取locale。笔记:
- ISO 639 不是一个稳定的标准——一些语言的代码已经改变。此函数返回的列表包括代码已更改的语言的新代码和旧代码。
Locale
类还支持最长 8 个字符的语言代码。因此,此方法返回的列表不包含可用于获取 Locales 的所有有效代码。
- 返回:
- 一组 ISO 639 双字母语言代码。
-
getLanguage
返回此 Locale 的语言代码。- 实现注意事项:
- 此方法返回过时的 ISO 639 代码(“iw”、“ji”和“in”)的新形式。有关详细信息,请参阅 遗留语言代码。
- 返回:
- 语言代码,如果未定义则为空字符串。
- 参见:
-
getScript
返回此locale的脚本,它应该是空字符串或 ISO 15924 4 字母脚本代码。第一个字母大写,其余字母小写,例如“Latn”、 “Cyrl”。- 返回:
- 脚本代码,如果未定义则为空字符串。
- 自从:
- 1.7
- 参见:
-
getCountry
返回此区域设置的国家/地区代码,它应该是空字符串、大写 ISO 3166 2 字母代码或 UN M.49 3 位代码。- 返回:
- 国家/地区代码,如果未定义则为空字符串。
- 参见:
-
getVariant
返回此locale的变体代码。- 返回:
- 变体代码,如果未定义则为空字符串。
- 参见:
-
hasExtensions
public boolean hasExtensions()- 返回:
true
如果这个Locale
有任何扩展- 自从:
- 1.8
-
stripExtensions
- 返回:
-
此
Locale
的副本,没有扩展名,或者this
如果this
没有扩展名 - 自从:
- 1.8
-
getExtension
返回与指定键关联的扩展(或私人使用)值,如果没有与该键关联的扩展,则返回 null。要格式正确,密钥必须是[0-9A-Za-z]
之一。键不区分大小写,因此例如 'z' 和 'Z' 代表相同的扩展名。- 参数:
key
- 扩展密钥- 返回:
- 扩展名,如果此locale未定义指定键的扩展名,则为 null。
- 抛出:
IllegalArgumentException
- 如果密钥格式不正确- 自从:
- 1.7
- 参见:
-
getExtensionKeys
返回与此locale关联的扩展键集,如果没有扩展,则返回空集。返回的集合是不可修改的。键都是小写的。- 返回:
- 扩展键集,如果此locale没有扩展名,则为空集。
- 自从:
- 1.7
-
getUnicodeLocaleAttributes
返回与此locale关联的 unicode locale属性集,如果没有属性,则返回空集。返回的集合是不可修改的。- 返回:
- 属性集。
- 自从:
- 1.7
-
getUnicodeLocaleType
返回与此locale的指定 Unicode locale键关联的 Unicode locale类型。返回没有类型定义的键的空字符串。如果未定义键,则返回 null。键不区分大小写。密钥必须是两个字母数字字符 ([0-9a-zA-Z]),否则将抛出 IllegalArgumentException。- 参数:
key
- Unicode locale键- 返回:
- 与键关联的 Unicode locale类型,如果locale未定义键,则为 null。
- 抛出:
IllegalArgumentException
- 如果密钥格式不正确NullPointerException
- 如果key
为空- 自从:
- 1.7
-
getUnicodeLocaleKeys
返回此locale定义的 Unicode locale键集,如果此locale没有,则返回空集。返回的集合是不可变的。键都是小写的。- 返回:
- Unicode locale键集,如果此locale没有 Unicode locale关键字,则为空集。
- 自从:
- 1.7
-
toString
返回此Locale
对象的字符串表示形式,由语言、国家/地区、变体、脚本和扩展组成,如下所示:语言+“_”+国家+“_”+(变体+“_#”|“#”)+脚本+“_”+扩展
语言始终为小写,国家/地区始终为大写,文字始终为标题,扩展名始终为小写。扩展和私人使用的子标签将按照toLanguageTag()
中解释的规范顺序排列。当locale既没有脚本也没有扩展时,结果与 Java 6 及之前的版本相同。
如果缺少语言和国家字段,此函数将返回空字符串,即使存在变体、脚本或扩展字段(您不能只有一个变体的locale,变体必须伴随一个很好的-形成的语言或国家代码)。
如果存在脚本或扩展名并且缺少变体,则在“#”之前不添加下划线。
此行为旨在支持调试并与以前使用的
toString
兼容,仅需要语言、国家/地区和变体字段。要将 Locale 表示为 String 以用于交换目的,请使用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
返回表示此locale的格式正确的 IETF BCP 47 语言标记。如果此
Locale
具有不满足 IETF BCP 47 语言标记语法要求的语言、国家或变体,则此方法将按如下所述处理这些字段:语言:如果 language 为空,或者不是 良构的(例如“a”或“e2”),它将作为“und”(未确定)发出。
国家:如果国家不是 良构的(例如“12”或“美国”),它将被省略。
变体:如果变体是良构的 ,每个子段(由“-”或“_”分隔)作为子标签发出。否则:
- 如果所有子段都匹配
[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 支持一些旧的locale表示,包括已弃用的 ISO 语言代码,以实现兼容性。此方法执行以下转换:
- 已弃用的 ISO 语言代码“iw”、“ji”和“in”分别转换为“he”、“yi”和“id”。
- 具有语言“no”、国家/地区“NO”和变体“NY”的locale(代表 Norwegian Nynorsk(挪威))被转换为语言标签“nn-NO”。
笔记:虽然通过这种方法得到的语言标签格式正确(满足 IETF BCP 47 规范定义的语法要求),但它不一定是有效的 BCP 47 语言标签。例如,
Locale.forLanguageTag("xx-YY").toLanguageTag();
将返回“xx-YY”,但语言子标签“xx”和区域子标签“YY”无效,因为它们未在 IANA 语言子标签注册表中注册。- 返回:
- 代表locale的 BCP47 语言标签
- 自从:
- 1.7
- 参见:
- 如果所有子段都匹配
-
forLanguageTag
返回指定 IETF BCP 47 语言标记字符串的locale。如果指定的语言标签包含任何格式错误的子标签,第一个这样的子标签和所有后续的子标签将被忽略。与在这种情况下抛出异常的
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(); // returns "POSIX" loc.getExtension('x'); // returns null loc = Locale.forLanguageTag("de-POSIX-x-URP-lvariant-Abc-Def"); loc.getVariant(); // returns "POSIX_Abc_Def" loc.getExtension('x'); // returns "urp"
- 当 languageTag 参数包含一个 extlang 子标签时,第一个这样的子标签被用作语言,并且忽略主要语言子标签和其他 extlang 子标签:
Locale.forLanguageTag("ar-aao").getLanguage(); // returns "aao" Locale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
- 除了保持不变的变体标签外,大小写都已标准化。语言标准化为小写,文字标准化为标题,国家标准化为大写,扩展标准化为小写。
- 如果在处理之后,locale将完全匹配 ja_JP_JP 或 th_TH_TH 而没有扩展名,则添加适当的扩展名,就像调用构造函数一样:
Locale.forLanguageTag("ja-JP-x-lvariant-JP").toLanguageTag(); // returns "ja-JP-u-ca-japanese-x-lvariant-JP" Locale.forLanguageTag("th-TH-x-lvariant-TH").toLanguageTag(); // returns "th-TH-u-nu-thai-x-lvariant-TH"
这实现了 BCP47 的“语言标签”生产,因此支持遗留(常规和不规则,在 BCP47 中称为“类型:祖父”)以及私人使用的语言标签。独立的私人使用标签表示为空语言和扩展名“x-whatever”,而遗留标签将转换为它们存在的规范替代品。
具有规范替换的旧标签如下:
遗留标签 现代替代品 艺术逻辑 杰博 我-ami 阿米 i-bnn bnn 我学 客 i-克林贡语 tlh i-勒克斯 lb 纳瓦霍语 nv 我-pwn pwn 爱涛 tao i-tay tay 伊津 tsu 禁书 注意事项 无宁 nn sgn-BE-FR sfb sgn-BE-NL vgt sgn-中国-德国 sgg 国语 厘米 客家人 客 zh-min-nan 楠 志祥 hsn 没有现代替代品的旧标签将按如下方式转换:
遗留标签 转换为 高卢语 xtg-x-cel-高卢语 英译英 en-GB-x-oed 我默认 en-x-i-default i-enochian und xi enochian 我-明哥 see-x-i-mingo zh-min 南新之民 有关所有遗留标签的列表,请参阅 IANA 语言子标签注册表(搜索“类型:祖父”)。
笔记: 不能保证
toLanguageTag
和forLanguageTag
会往返。- 参数:
languageTag
- 语言标签- 返回:
- 最能代表语言标签的locale。
- 抛出:
NullPointerException
- 如果languageTag
是null
- 自从:
- 1.7
- 参见:
-
getISO3Language
返回此区域设置语言的三个字母缩写。如果语言匹配 ISO 639-1 两字母代码,则返回相应的 ISO 639-2/T 三字母小写代码。可以在线找到 ISO 639-2 语言代码,请参阅“语言名称表示代码第 2 部分:Alpha-3 代码”。如果locale指定三字母语言,则按原样返回该语言。如果locale未指定语言,则返回空字符串。- 返回:
- 此locale语言的三个字母缩写。
- 抛出:
MissingResourceException
- 如果三字母语言缩写不适用于此locale,则抛出 MissingResourceException。
-
getISO3Country
返回此locale所在国家/地区的三个字母的缩写。如果国家/地区匹配 ISO 3166-1 alpha-2 代码,则返回相应的 ISO 3166-1 alpha-3 大写代码。如果locale未指定国家/地区,则这将为空字符串。可以在线找到 ISO 3166-1 代码。
- 返回:
- 此locale所在国家/地区的三个字母缩写。
- 抛出:
MissingResourceException
- 如果三字母国家/地区缩写不适用于此locale,则抛出 MissingResourceException。
-
getDisplayLanguage
返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将针对默认的DISPLAY
locale进行本地化。例如,如果locale是 fr_FR 而默认的DISPLAY
locale是 en_US,getDisplayLanguage() 将返回“French”;如果locale是 en_US 而默认的DISPLAY
locale是 fr_FR,getDisplayLanguage() 将返回“anglais”。如果返回的名称无法针对默认的DISPLAY
locale进行本地化(例如,我们没有克罗地亚语的日语名称),则此函数会返回英文名称,并使用 ISO 代码作为最后的手段值。如果locale未指定语言,则此函数返回空字符串。- 返回:
- 显示语言的名称。
-
getDisplayLanguage
返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将根据 inLocale 进行本地化。例如,如果locale是 fr_FR 而 inLocale 是 en_US,getDisplayLanguage() 将返回“French”;如果locale是 en_US 而 inLocale 是 fr_FR,getDisplayLanguage() 将返回“anglais”。如果根据 inLocale 无法对返回的名称进行本地化(例如,我们没有克罗地亚语的日文名称),则此函数会求助于英文名称,最后求助于 ISO 代码作为最后的手段值。如果locale未指定语言,则此函数返回空字符串。- 参数:
inLocale
- 检索显示语言的locale。- 返回:
- 适用于给定locale的显示语言的名称。
- 抛出:
NullPointerException
- 如果inLocale
是null
-
getDisplayScript
返回适合向用户显示的区域设置脚本的名称。如果可能,该名称将针对默认的DISPLAY
locale进行本地化。如果此locale未指定脚本代码,则返回空字符串。- 返回:
-
当前默认
DISPLAY
locale的脚本代码的显示名称 - 自从:
- 1.7
-
getDisplayScript
返回适合向用户显示的区域设置脚本的名称。如果可能,该名称将针对给定的locale进行本地化。如果此locale未指定脚本代码,则返回空字符串。- 参数:
inLocale
- 检索显示脚本的locale。- 返回:
-
当前默认
DISPLAY
locale的脚本代码的显示名称 - 抛出:
NullPointerException
- 如果inLocale
是null
- 自从:
- 1.7
-
getDisplayCountry
返回适合向用户显示的区域设置国家名称。如果可能,返回的名称将针对默认的DISPLAY
locale进行本地化。例如,如果locale是 fr_FR 而默认的DISPLAY
locale是 en_US,getDisplayCountry() 将返回“France”;如果locale是 en_US 而默认的DISPLAY
locale是 fr_FR,getDisplayCountry() 将返回“Etats-Unis”。如果返回的名称无法针对默认的DISPLAY
locale进行本地化(例如,我们没有克罗地亚的日语名称),则此函数会返回英文名称,并使用 ISO 代码作为最后的手段值。如果locale未指定国家/地区,则此函数返回空字符串。- 返回:
- 适用于locale的国家名称。
-
getDisplayCountry
返回适合向用户显示的区域设置国家名称。如果可能,返回的名称将根据 inLocale 进行本地化。例如,如果locale是 fr_FR,inLocale 是 en_US,getDisplayCountry() 将返回“France”;如果locale是 en_US 并且 inLocale 是 fr_FR,getDisplayCountry() 将返回“Etats-Unis”。如果返回的名称不能根据 inLocale 进行本地化。 (比如,我们没有克罗地亚的日文名称),此函数求助于英文名称,最后求助于 ISO 代码作为最后的手段值。如果locale未指定国家/地区,则此函数返回空字符串。- 参数:
inLocale
- 检索显示国家/地区的locale。- 返回:
- 适用于给定locale的国家名称。
- 抛出:
NullPointerException
- 如果inLocale
是null
-
getDisplayVariant
返回适合向用户显示的区域设置变体代码的名称。如果可能,该名称将针对默认的DISPLAY
locale进行本地化。如果locale未指定变体代码,则此函数返回空字符串。- 返回:
- 适用于区域设置的显示变体代码的名称。
-
getDisplayVariant
返回适合向用户显示的区域设置变体代码的名称。如果可能,该名称将针对 inLocale 进行本地化。如果locale未指定变体代码,则此函数返回空字符串。- 参数:
inLocale
- 要为其检索显示变体代码的locale。- 返回:
- 适用于给定locale的显示变体代码的名称。
- 抛出:
NullPointerException
- 如果inLocale
是null
-
getDisplayName
返回适合向用户显示的区域设置名称。这将由 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 和可选的 Unicode 扩展 返回的值组合成一个字符串。非空值按顺序使用,第二个和后续名称在括号中。例如:语言(脚本、国家、变体(、扩展名)*)
取决于locale中指定的字段。上面括号中的字段分隔符表示为逗号字符,可能会根据locale进行本地化。如果语言、脚本、国家和变体字段都是空的,则此函数返回空字符串。
语言(国家(,扩展名)*)
语言(变体(,扩展名)*)
脚本(国家(,扩展名)*)
国家(扩展名)*
- 返回:
- 适合显示的locale的名称。
-
getDisplayName
返回适合向用户显示的区域设置名称。这将由 getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant() 和可选的 Unicode 扩展 返回的值组合成一个字符串。非空值按顺序使用,第二个和后续名称在括号中。例如:语言(脚本、国家、变体(、扩展名)*)
取决于locale中指定的字段。上面括号中的字段分隔符表示为逗号字符,可能会根据locale进行本地化。如果语言、脚本、国家和变体字段都是空的,则此函数返回空字符串。
语言(国家(,扩展名)*)
语言(变体(,扩展名)*)
脚本(国家(,扩展名)*)
国家(扩展名)*
- 参数:
inLocale
- 要为其检索显示名称的locale。- 返回:
- 适合显示的locale的名称。
- 抛出:
NullPointerException
- 如果inLocale
是null
-
clone
重写可克隆。 -
hashCode
public int hashCode()重写哈希码。由于 Locales 通常用于哈希表,因此缓存值以提高速度。 -
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
的此过滤操作可确保仅返回唯一匹配的locale。- 参数:
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
public static Locale lookup(List <Locale.LanguageRange > priorityList, Collection <Locale > locales) 使用 RFC 4647 中定义的查找机制返回最匹配语言标记的Locale
实例。- 参数:
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重降序排列locales
-Locale
用于匹配的实例- 返回:
-
根据优先级或权重选择的最佳匹配
Locale
实例,如果没有匹配,则为null
。 - 抛出:
NullPointerException
- 如果priorityList
或locales
是null
- 自从:
- 1.8
-
lookupTag
public static String lookupTag(List <Locale.LanguageRange > priorityList, Collection <String > tags) 使用 RFC 4647 中定义的查找机制返回最匹配的语言标记。此对给定tags
的查找操作可确保返回保留大小写的第一个匹配标记。- 参数:
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重降序排列tags
- 用于匹配的语言 tangs- 返回:
-
根据优先级或权重选择的最佳匹配语言标签,如果没有匹配项,则为
null
。 - 抛出:
NullPointerException
- 如果priorityList
或tags
是null
- 自从:
- 1.8
-