Module java.base
Package java.util

Class Locale

java.lang.Object
java.util.Locale
所有已实现的接口:
Serializable, Cloneable

public final class Locale extends Object implements Cloneable, Serializable
一个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"
注意:尽管BCP 47要求字段值在IANA语言子标签注册表中注册,但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)及其重载从给定的languagecountry和/或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 的区域设置的状态。

由于这些问题,建议客户端迁移到构建符合规范的区域设置并改用 forLanguageTagLocale.Builder API。希望获得完整区域设置的字符串表示的客户端可以始终依赖 toLanguageTag 来实现此目的。

特殊情况

出于兼容性原因,两个不符合规范的区域设置被视为特殊情况。这些是 ja_JP_JPth_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 转换为 iwyi 转换为 jiid 转换为 in。自 Java SE 17 起,不再这样。每种语言都映射到其新形式;iw 映射到 heji 映射到 yiin 映射到 id

为了向后兼容的行为,系统属性 java.locale.useOldISOCodes 将行为恢复到 Java SE 17 之前的状态。如果系统属性设置为 true,这三个当前语言代码将映射到它们的向后兼容形式。该属性仅在 Java 运行时启动时读取,随后对 System.setProperty() 的调用将不会产生任何效果。

在 1.7 中添加的 API 在旧语言代码和新语言代码之间进行映射,将映射代码保留在 Locale 内部(因此 getLanguagetoString 反映了映射代码,这取决于 java.locale.useOldISOCodes 系统属性),但在 BCP 47 语言标签 API 中使用新代码(因此 toLanguageTag 反映了新代码)。这样无论使用哪种代码或 API 构造 Locale,都保持了 Locale 之间的等价性。Java 的默认资源包查找机制也实现了这种映射,因此资源可以使用任一约定命名,参见 ResourceBundle.Control

三字母语言/国家(地区)代码

Locale 构造函数始终规定语言和国家参数的长度为两个字符,尽管实际上它们接受任何长度。现在规范已经放宽,允许语言代码为两到八个字符,国家(地区)代码为两到三个字符,特别是在 IANA 语言子标记注册表中指定的三字母语言代码和三位数地区代码。为了保持兼容性,实现仍然不会强加长度约束。

自 JDK 版本:
1.1
外部规范
参见:
  • Field Details

    • ENGLISH

      public static final Locale ENGLISH
      有用的语言常量。
    • FRENCH

      public static final Locale FRENCH
      有用的语言常量。
    • GERMAN

      public static final Locale GERMAN
      有用的语言常量。
    • ITALIAN

      public static final Locale ITALIAN
      有用的语言常量。
    • JAPANESE

      public static final Locale JAPANESE
      有用的语言常量。
    • KOREAN

      public static final Locale KOREAN
      有用的语言常量。
    • CHINESE

      public static final Locale CHINESE
      有用的语言常量。
    • SIMPLIFIED_CHINESE

      public static final Locale SIMPLIFIED_CHINESE
      有用的语言常量。
    • TRADITIONAL_CHINESE

      public static final Locale TRADITIONAL_CHINESE
      有用的语言常量。
    • FRANCE

      public static final Locale FRANCE
      有用的国家常量。
    • GERMANY

      public static final Locale GERMANY
      有用的国家常量。
    • ITALY

      public static final Locale ITALY
      有用的国家常量。
    • JAPAN

      public static final Locale JAPAN
      有用的国家常量。
    • KOREA

      public static final Locale KOREA
      有用的国家常量。
    • UK

      public static final Locale UK
      有用的国家常量。
    • US

      public static final Locale US
      有用的国家常量。
    • CANADA

      public static final Locale CANADA
      有用的国家常量。
    • CANADA_FRENCH

      public static final Locale CANADA_FRENCH
      有用的国家常量。
    • ROOT

      public static final Locale ROOT
      根区域的有用常量。根区域是其语言、国家和变体均为空("")字符串的区域。这被视为所有区域的基础区域,并用作区域敏感操作的语言/国家中性区域。
      自 JDK 版本:
      1.6
    • CHINA

      public static final Locale CHINA
      有用的国家常量。
    • PRC

      public static final Locale PRC
      有用的国家常量。
    • TAIWAN

      public static final Locale TAIWAN
      有用的国家常量。
    • PRIVATE_USE_EXTENSION

      public static final char PRIVATE_USE_EXTENSION
      私有使用扩展('x')的键。
      自 JDK 版本:
      1.7
      参见:
    • UNICODE_LOCALE_EXTENSION

      public static final char UNICODE_LOCALE_EXTENSION
      Unicode 区域扩展('u')的键。
      自从:
      1.7
      参见:
  • Constructor Details

    • Locale

      @Deprecated(since="19") public Locale(String language, String country, String variant)
      Deprecated.
      Locale constructors have been deprecated. See Obtaining a Locale for other options.
      从语言、国家和变体构造区域设置。此构造函数将语言值标准化为小写,将国家值标准化为大写。
      实现注意事项:
      • 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码
      • 出于向后兼容性的原因,此构造函数不对输入进行任何语法检查。
      • 特殊处理两种情况("ja"、"JP"、"JP")和("th"、"TH"、"TH"),有关更多信息,请参见特殊情况
      参数:
      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(since="19") public Locale(String language, String country)
      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(since="19") public Locale(String language)
      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

      public static Locale of(String language, String country, String variant)
      从语言、国家和变体获取区域设置。此方法将语言值标准化为小写,将国家值标准化为大写。
      实现注意事项:
      • 此方法不对输入进行任何语法检查。使用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

      public static Locale of(String language, String country)
      从语言和国家获取区域设置。此方法将语言值标准化为小写,将国家值标准化为大写。
      实现注意事项:
      • 此方法不对输入进行任何语法检查。使用Locale.Builder进行完整的 BCP47 语法检查。
      • 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码
      参数:
      language - 语言代码。请参阅Locale类描述中的语言值。
      country - 国家代码。请参阅Locale类描述中的国家值。
      返回:
      一个Locale对象
      抛出:
      NullPointerException - 如果任一参数为 null。
      自从:
      19
    • of

      public static Locale of(String language)
      从语言代码获取区域设置。此方法将语言值标准化为小写。
      实现注意事项:
      • 此方法不对输入进行任何语法检查。使用Locale.Builder进行完整的 BCP47 语法检查。
      • 过时的 ISO 639 代码("iw"、"ji" 和 "in")将映射到它们当前的形式。有关更多信息,请参见旧语言代码
      参数:
      language - 语言代码。请参阅Locale类描述中的语言值。
      返回:
      一个Locale对象
      抛出:
      NullPointerException - 如果参数为 null。
      自从:
      19
    • getDefault

      public static Locale getDefault()
      获取此 Java 虚拟机实例的默认区域设置的当前值。

      Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。可以使用setDefault方法更改默认区域设置。

      返回:
      此 Java 虚拟机实例的默认区域设置
    • getDefault

      public static Locale getDefault(Locale.Category category)
      获取此 Java 虚拟机实例的指定类别的默认区域设置的当前值。

      Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。可以使用 setDefault(Locale.Category, Locale) 方法更改默认区域设置。

      参数:
      category - 要获取默认区域设置的指定类别
      返回:
      此 Java 虚拟机实例的指定类别的默认区域设置
      抛出:
      NullPointerException - 如果类别为 null
      自从:
      1.7
      参见:
    • setDefault

      public static void setDefault(Locale newLocale)
      设置此 Java 虚拟机实例的默认区域设置。这不会影响主机区域设置。

      如果存在安全管理器,则在更改默认区域设置之前将调用其checkPermission方法,该方法具有PropertyPermission("user.language", "write")权限。

      Java 虚拟机在启动期间基于主机环境设置默认区域设置。如果未明确指定区域设置,则许多区域设置敏感方法将使用默认区域设置。

      由于更改默认区域设置可能会影响许多不同功能领域,因此只有在调用方准备好重新初始化在同一 Java 虚拟机中运行的区域设置代码时,才应使用此方法。

      通过使用此方法设置默认区域设置,每个类别的默认区域设置也将设置为指定的默认区域设置。

      参数:
      newLocale - 新的默认区域设置
      抛出:
      SecurityException - 如果存在安全管理器且其checkPermission方法不允许该操作。
      NullPointerException - 如果newLocale为 null
      参见:
    • setDefault

      public static void setDefault(Locale.Category category, Locale newLocale)
      设置此Java虚拟机实例的指定类别的默认区域设置。这不会影响主机区域设置。

      如果存在安全管理器,则在更改默认区域设置之前,将调用其checkPermission方法,该方法具有PropertyPermission("user.language", "write")权限。

      Java虚拟机在启动期间基于主机环境设置默认区域设置。如果没有明确指定区域设置,则许多区域设置敏感方法将使用它。

      由于更改默认区域设置可能会影响许多不同功能领域,因此只有在调用方准备好重新初始化在同一Java虚拟机中运行的区域设置代码时,才应使用此方法。

      参数:
      category - 要设置默认区域设置的指定类别
      newLocale - 新的默认区域设置
      抛出:
      SecurityException - 如果存在安全管理器且其checkPermission方法不允许该操作。
      NullPointerException - 如果类别和/或newLocale为null
      自版本:
      1.7
      参见:
    • getAvailableLocales

      public static Locale[] getAvailableLocales()
      返回已安装的区域设置数组。返回的数组表示Java运行时环境和已安装的LocaleServiceProvider实现支持的区域设置的并集。返回的数组至少必须包含等于Locale.ROOT和等于Locale.USLocale实例。
      返回:
      已安装的区域设置数组
    • availableLocales

      public static Stream<Locale> availableLocales()
      返回已安装的区域设置流。返回的流表示Java运行时环境和已安装的LocaleServiceProvider实现支持的区域设置的并集。返回的流至少必须包含等于Locale.ROOT和等于Locale.USLocale实例。
      实现注意:
      getAvailableLocales()不同,此方法不会创建区域设置数组的防御性副本。
      返回:
      已安装的区域设置流
      自版本:
      21
    • getISOCountries

      public static String[] getISOCountries()
      返回ISO 3166中定义的所有2字母国家/地区代码的列表。可用于获取区域设置。此方法等效于使用typeLocale.IsoCountryCode.PART1_ALPHA2getISOCountries(Locale.IsoCountryCode type)

      注意: Locale类还支持其他用于国家(地区)的代码,例如3字母数字UN M.49区域代码。因此,此方法返回的列表不包含可用于获取区域设置的所有有效代码。

      请注意,此方法不返回过时的2字母国家/地区代码。ISO3166-3代码指定了这些过时代码的国家代码,可以从使用typeLocale.IsoCountryCode.PART3getISOCountries(Locale.IsoCountryCode type)检索。

      返回:
      一个ISO 3166两字母国家/地区代码数组。
    • getISOCountries

      public static Set<String> getISOCountries(Locale.IsoCountryCode type)
      返回指定类型的ISO3166国家代码的Set
      参数:
      type - 指定的ISO代码类型Locale.IsoCountryCode
      返回:
      指定类型的ISO3166国家代码的Set
      抛出:
      NullPointerException - 如果类型为null
      自版本:
      9
      参见:
    • getISOLanguages

      public static String[] getISOLanguages()
      返回ISO 639中定义的所有2字母语言代码的列表。可用于获取区域设置。

      注意:

      • ISO 639不是一个稳定的标准—一些语言的代码已更改。此函数返回的列表包括代码已更改的语言的新旧代码。
      • Locale类还支持长度最多为8个字符的语言代码。因此,此方法返回的列表不包含可用于获取区域设置的所有有效代码。
      返回:
      一个ISO 639两字母语言代码数组。
    • getLanguage

      public String getLanguage()
      返回此区域设置的语言代码。
      实现注意:
      此方法返回过时的ISO 639代码的新形式("iw","ji"和"in")。有关更多信息,请参见过时语言代码
      返回:
      语言代码,如果未定义则为空字符串。
      参见:
    • getScript

      public String getScript()
      返回此区域设置的脚本,应为空字符串或ISO 15924的4字母脚本代码。第一个字母大写,其余小写,例如,'Latn','Cyrl'。
      返回:
      脚本代码,如果未定义则为空字符串。
      自版本:
      1.7
      参见:
    • getCountry

      public String getCountry()
      返回此区域设置的国家/地区代码,应为空字符串,大写ISO 3166的2字母代码或UN M.49的3位数字代码。
      返回:
      国家/地区代码,如果未定义则为空字符串。
      参见:
    • getVariant

      public String getVariant()
      返回此区域设置的变体代码。
      返回:
      变体代码,如果未定义则为空字符串。
      参见:
    • hasExtensions

      public boolean hasExtensions()
      如果此Locale具有任何扩展,则返回true
      返回:
      如果此Locale具有任何扩展,则返回true
      自版本:
      1.8
    • stripExtensions

      public Locale stripExtensions()
      返回不带扩展的此Locale的副本。如果此Locale没有扩展,则返回此Locale
      返回:
      不带扩展的此Locale的副本,如果this没有扩展,则返回this
      自版本:
      1.8
    • getExtension

      public String getExtension(char key)
      返回与指定键关联的扩展(或私有使用)值,如果与键关联的扩展不存在,则返回null。为了格式良好,键必须是[0-9A-Za-z]之一。键不区分大小写,因此例如'z'和'Z'表示相同的扩展。
      参数:
      key - 扩展键
      返回:
      扩展,如果此区域设置未为指定键定义扩展,则为null。
      抛出:
      IllegalArgumentException - 如果键格式不正确
      自版本:
      1.7
      参见:
    • getExtensionKeys

      public Set<Character> getExtensionKeys()
      返回与此区域设置关联的扩展键集,如果没有扩展,则返回空集。返回的集合是不可修改的。键都将是小写的。
      返回:
      扩展键集,如果此区域设置没有扩展,则返回空集。
      自版本:
      1.7
    • getUnicodeLocaleAttributes

      public Set<String> getUnicodeLocaleAttributes()
      返回与此区域设置关联的Unicode区域设置属性集,如果没有属性,则返回空集。返回的集合是不可修改的。
      返回:
      属性集。
      自版本:
      1.7
    • getUnicodeLocaleType

      public String getUnicodeLocaleType(String key)
      返回此区域设置的指定Unicode区域设置键的Unicode区域设置类型。对于未定义类型的键,返回空字符串。如果未定义键,则返回null。键不区分大小写。键必须是两个字母数字字符([0-9a-zA-Z]),否则将抛出IllegalArgumentException。
      参数:
      key - Unicode区域设置键
      返回:
      与键关联的Unicode区域设置类型,如果区域设置未定义键,则返回null。
      抛出:
      IllegalArgumentException - 如果键格式不正确
      NullPointerException - 如果key为null
      自版本:
      1.7
    • getUnicodeLocaleKeys

      public Set<String> getUnicodeLocaleKeys()
      返回此区域设置定义的Unicode区域设置键集,如果此区域设置没有键,则返回空集。返回的集合是不可变的。键都是小写的。
      返回:
      Unicode区域设置键集,如果此区域设置没有Unicode区域设置关键字,则返回空集。
      自版本:
      1.7
    • toString

      public final String 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
      覆盖:
      toString 在类 Object
      返回:
      区域设置的字符串表示形式,用于调试。
      另请参阅:
    • toLanguageTag

      public String 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();
      
      将返回"xx-YY",但语言子标记"xx"和区域子标记"YY"是无效的,因为它们未在IANA语言子标记注册表中注册。
      返回:
      表示区域设置的BCP47语言标记
      自:
      1.7
      另请参阅:
    • caseFoldLanguageTag

      public static String caseFoldLanguageTag(String languageTag)
      返回一个大小写折叠的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 - 如果languageTagnull
      自:
      21
      外部规范
    • forLanguageTag

      public static Locale forLanguageTag(String languageTag)
      返回指定的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"
        

      这实现了BCP47的'Language-Tag'规范,因此支持传统(常规和不规则,在BCP47中称为"Type: grandfathered")以及私有使用语言标记。独立的私有使用标记表示为空语言和扩展'x-whatever',传统标记将转换为它们的规范替代项(如果存在)。

      具有规范替代项的传统标记如下:

      具有规范替代项的传统标记
      传统标记 现代替换项
      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")。

      注意:不能保证toLanguageTagforLanguageTag之间的往返。

      参数:
      languageTag - 语言标记
      返回:
      最能代表语言标记的区域设置。
      抛出:
      NullPointerException - 如果languageTagnull
      自:
      1.7
      参见:
    • getISO3Language

      public String getISO3Language() throws MissingResourceException
      返回此区域设置语言的三个字母缩写。如果语言与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

      public String getISO3Country() throws MissingResourceException
      返回此区域设置国家的三个字母缩写。如果国家与ISO 3166-1 alpha-2代码匹配,则返回相应的ISO 3166-1 alpha-3大写代码。如果区域设置未指定国家,则将返回空字符串。

      ISO 3166-1代码可以在线找到。

      返回:
      此区域设置国家的三个字母缩写
      抛出:
      MissingResourceException - 如果此区域设置的三字母国家缩写不可用。
    • getDisplayLanguage

      public final String getDisplayLanguage()
      返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将根据默认的DISPLAY区域设置进行本地化。例如,如果区域设置为fr_FR且默认的DISPLAY区域设置为en_US,则getDisplayLanguage()将返回"French";如果区域设置为en_US且默认的DISPLAY区域设置为fr_FR,则getDisplayLanguage()将返回"anglais"。如果返回的名称无法根据默认的DISPLAY区域设置进行本地化(例如,我们没有克罗地亚语的日语名称),此函数将退回到英语名称,并将ISO代码作为最后一手值。如果区域设置未指定语言,则此函数将返回空字符串。
      返回:
      显示语言的名称。
    • getDisplayLanguage

      public String getDisplayLanguage(Locale inLocale)
      返回适合向用户显示的区域设置语言的名称。如果可能,返回的名称将根据inLocale进行本地化。例如,如果区域设置为fr_FR且inLocale为en_US,则getDisplayLanguage()将返回"French";如果区域设置为en_US且inLocale为fr_FR,则getDisplayLanguage()将返回"anglais"。如果返回的名称无法根据inLocale进行本地化(例如,我们没有克罗地亚语的日语名称),此函数将退回到英语名称,最后使用ISO代码作为最后一手值。如果区域设置未指定语言,则此函数将返回空字符串。
      参数:
      inLocale - 要检索显示语言的区域设置。
      返回:
      适合给定区域设置的显示语言的名称。
      抛出:
      NullPointerException - 如果inLocalenull
    • getDisplayScript

      public String getDisplayScript()
      返回适合向用户显示的区域设置脚本的名称。如果可能,名称将根据默认的DISPLAY区域设置进行本地化。如果此区域设置未指定脚本代码,则返回空字符串。
      返回:
      当前默认DISPLAY区域设置的脚本代码的显示名称
      自:
      1.7
    • getDisplayScript

      public String getDisplayScript(Locale inLocale)
      返回适合向用户显示的区域设置脚本的名称。如果可能,名称将根据给定的区域设置进行本地化。如果此区域设置未指定脚本代码,则返回空字符串。
      参数:
      inLocale - 要检索显示脚本的区域设置。
      返回:
      当前默认DISPLAY区域设置的脚本代码的显示名称
      抛出:
      NullPointerException - 如果inLocalenull
      自版本:
      1.7
    • getDisplayCountry

      public final String getDisplayCountry()
      返回适合向用户显示的区域设置的国家名称。如果可能,返回的名称将根据默认DISPLAY区域设置进行本地化。例如,如果区域设置为fr_FR,而默认DISPLAY区域设置为en_US,则getDisplayCountry()将返回"France";如果区域设置为en_US,而默认DISPLAY区域设置为fr_FR,则getDisplayCountry()将返回"Etats-Unis"。如果返回的名称无法根据默认DISPLAY区域设置进行本地化(例如,我们没有克罗地亚的日语名称),此函数将回退到英文名称,并将ISO代码作为最后的值。如果区域设置未指定国家,则此函数将返回空字符串。
      返回:
      适合区域设置的国家名称。
    • getDisplayCountry

      public String getDisplayCountry(Locale inLocale)
      返回适合向用户显示的区域设置的国家名称。如果可能,返回的名称将根据inLocale进行本地化。例如,如果区域设置为fr_FR,而inLocale为en_US,则getDisplayCountry()将返回"France";如果区域设置为en_US,而inLocale为fr_FR,则getDisplayCountry()将返回"Etats-Unis"。如果返回的名称无法根据inLocale进行本地化(例如,我们没有克罗地亚的日语名称),此函数将回退到英文名称,并最终使用ISO代码作为最后的值。如果区域设置未指定国家,则此函数将返回空字符串。
      参数:
      inLocale - 要检索显示国家的区域设置。
      返回:
      适合给定区域设置的国家名称。
      抛出:
      NullPointerException - 如果inLocalenull
    • getDisplayVariant

      public final String getDisplayVariant()
      返回适合向用户显示的区域设置的变体代码的名称。如果可能,名称将根据默认DISPLAY区域设置进行本地化。如果区域设置未指定变体代码,则此函数将返回空字符串。
      返回:
      适合区域设置的显示变体代码的名称。
    • getDisplayVariant

      public String getDisplayVariant(Locale inLocale)
      返回适合向用户显示的区域设置的变体代码的名称。如果可能,名称将根据inLocale进行本地化。如果区域设置未指定变体代码,则此函数将返回空字符串。
      参数:
      inLocale - 要检索显示变体代码的区域设置。
      返回:
      适合给定区域设置的显示变体代码的名称。
      抛出:
      NullPointerException - 如果inLocalenull
    • getDisplayName

      public final String getDisplayName()
      返回适合向用户显示的区域设置的名称。这将是由getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant()和可选的Unicode扩展组装成单个字符串的值。非空值按顺序使用,括号中的第二个及后续名称用括号括起来。例如:
      语言(脚本,国家,变体(,扩展)*)
      语言(国家(,扩展)*)
      语言(变体(,扩展)*)
      脚本(国家(,扩展)*)
      国家(扩展)*
      取决于区域设置中指定的字段。上述括号中的字段分隔符,表示为逗号字符,可能会根据区域设置进行本地化。如果语言、脚本、国家和变体字段都为空,则此函数将返回空字符串。
      返回:
      适合显示的区域设置的名称。
    • getDisplayName

      public String getDisplayName(Locale inLocale)
      返回适合向用户显示的区域设置的名称。这将是由getDisplayLanguage()、getDisplayScript()、getDisplayCountry()、getDisplayVariant()和可选的Unicode扩展组装成单个字符串的值。非空值按顺序使用,括号中的第二个及后续名称用括号括起来。例如:
      语言(脚本,国家,变体(,扩展)*)
      语言(国家(,扩展)*)
      语言(变体(,扩展)*)
      脚本(国家(,扩展)*)
      国家(扩展)*
      取决于区域设置中指定的字段。上述括号中的字段分隔符,表示为逗号字符,可能会根据区域设置进行本地化。如果语言、脚本、国家和变体字段都为空,则此函数将返回空字符串。
      参数:
      inLocale - 要检索显示名称的区域设置。
      返回:
      适合显示的区域设置的名称。
      抛出:
      NullPointerException - 如果inLocalenull
    • clone

      public Object clone()
      覆盖Cloneable。
      覆盖:
      clone 在类 Object
      返回:
      此实例的克隆。
      参见:
    • hashCode

      public int hashCode()
      覆盖hashCode。由于区域设置经常用于哈希表中,为了提高速度,缓存值。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • equals

      public boolean equals(Object obj)
      如果此Locale等于另一个对象,则返回true。Locale被视为与具有相同语言、脚本、国家、变体和扩展的另一个Locale相等,并且与所有其他对象不相等。
      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的参考对象。
      返回:
      如果此Locale等于指定的对象,则返回true。
      参见:
    • 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 - 如果priorityListlocalesnull
      IllegalArgumentException - 如果在指定Locale.FilteringMode.REJECT_EXTENDED_RANGES时给定列表中包含一个或多个扩展语言范围
      自版本:
      1.8
    • filter

      public static List<Locale> filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
      使用RFC 4647中定义的过滤机制返回匹配的Locale实例列表。当modeLocale.FilteringMode.AUTOSELECT_FILTERING时,这等效于filter(List, Collection, FilteringMode)。对给定的locales进行的此过滤操作确保仅返回唯一匹配的区域设置。
      参数:
      priorityList - 用户的语言优先级列表,其中每个语言标记根据优先级或权重按降序排序
      locales - 用于匹配的Locale实例
      返回:
      匹配语言标记的Locale实例列表,按照优先级或权重按降序排序,如果没有匹配项则返回空列表。列表是可修改的。
      抛出:
      NullPointerException - 如果priorityListlocalesnull
      自版本:
      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 - 如果priorityListtagsnull
      IllegalArgumentException - 如果在指定Locale.FilteringMode.REJECT_EXTENDED_RANGES时给定列表中包含一个或多个扩展语言范围
      自版本:
      1.8
    • filterTags

      public static List<String> filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags)
      返回使用RFC 4647中定义的基本过滤机制返回匹配语言标签列表。当modeLocale.FilteringMode.AUTOSELECT_FILTERING时,这等同于filterTags(List, Collection, FilteringMode)。对给定的tags进行的这种过滤操作确保只返回保留大小写的唯一匹配标签。如果存在大小写不同的重复匹配标签,则返回保留大小写的第一个匹配标签。例如,如果在给定的tags中首先检查"de-ch"以进行匹配,则会返回"de-ch",而不是重复匹配标签"de-ch"和"de-CH"中的任何一个。请注意,如果给定的tags是无序的Collection,则返回的重复标签中的匹配标签可能会发生变化,这取决于Collection的实现方式。
      参数:
      priorityList - 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序
      tags - 语言标签
      返回:
      根据优先级或权重按降序排序的匹配语言标签列表,如果没有匹配项则返回空列表。该列表是可修改的。
      抛出:
      NullPointerException - 如果priorityListtagsnull
      自版本:
      1.8
    • lookup

      public static Locale lookup(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
      返回使用RFC 4647中定义的查找机制返回最佳匹配语言标签的Locale实例。
      参数:
      priorityList - 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序
      locales - 用于匹配的Locale实例
      返回:
      基于优先级或权重选择的最佳匹配Locale实例,如果没有匹配项则返回null
      抛出:
      NullPointerException - 如果priorityListlocalesnull
      自版本:
      1.8
    • lookupTag

      public static String lookupTag(List<Locale.LanguageRange> priorityList, Collection<String> tags)
      返回使用RFC 4647中定义的查找机制返回最佳匹配语言标签。
      参数:
      priorityList - 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序
      tags - 用于匹配的语言标签
      返回:
      基于优先级或权重选择的最佳匹配语言标签,如果没有匹配项则返回null
      抛出:
      NullPointerException - 如果priorityListtagsnull
      自版本:
      1.8