Module  java.base
软件包  java.util

Class Locale

  • All Implemented Interfaces:
    SerializableCloneable


    public final class Locale
    extends Object
    implements Cloneable, Serializable
    A Locale对象代表具体的地理,政治或文化区域。 需要Locale执行其任务的操作称为区域设置敏感型,并使用Locale为用户定制信息。 例如,显示一个数字是一个区域设置敏感的操作 - 该数字应该根据用户的本地国家,地区或文化的习惯和惯例进行格式化。

    Locale类实现了IETF BCP 47,它由RFC 4647 "Matching of Language Tags"RFC 5646 "Tags for Identifying Languages"组成,支持LDML(UTS#35,“Unicode语言环境数据标记语言”)BCP 47兼容的本地数据交换扩展。

    A Locale对象逻辑上由以下描述的字段组成。

    language
    ISO 639 alpha-2或alpha-3语言代码或最多8个字母字母的注册语言子标签(用于未来的增强功能)。 当语言同时具有alpha-2代码和alpha-3代码时,必须使用alpha-2代码。 您可以在IANA Language Subtag Registry中找到有效语言代码的完整列表(搜索“Type:language”)。 语言字段不区分大小写,但Locale总是规范化为小写。
    形式良好的语言值具有形式[a-zA-Z]{2,8} 请注意,这不是完整的BCP47语言生产,因为它不包括extlang。 它们不需要,因为现代的三字母语言代码替代它们。
    示例:“en”(英文),“ja”(日语),“kok”(Konkani)
    script
    ISO 15924 alpha-4脚本代码。 您可以在IANA语言小标签注册表中找到有效脚本代码的完整列表(搜索“类型:脚本”)。 脚本字段不区分大小写,但Locale总是规范化到标题大小写(第一个字母大写,其余的字母小写)。
    格式良好的脚本值的格式为[a-zA-Z]{4}
    示例:“Latn”(拉丁文),“Cyrl”(西里尔文)
    country (region)
    ISO 3166 alpha-2国家代码或UN M.49数字-3区号。 新新新新200新新旗新新200新200新新200新200新200新200新200新200新新200新200新新200新200新新200新200新新200新200新新200新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200 国家(地区)字段不区分大小写,但Locale总是规范化为大写。
    形式良好的国家/地区价值形式为[a-zA-Z]{2} | [0-9]{3}
    示例:“美国”(美国),“FR”(法国),“029”(加勒比)
    variant
    任何用于指示Locale的变化的任意值。 在有两个或多个变体值的情况下,每个值都表示自己的语义,这些值应按重要性排序,最重要的是首先用下划线('_')分隔。 变体字段区分大小写。
    注意:IETF BCP 47对变式子标签放置语法限制。 此外,BCP 47子标签也被严格用于表示定义语言或其方言的其他变体,这些语言或语言不被语言,脚本和区域子标签的任何组合覆盖。 您可以在IANA语言小标签注册表中找到有效的变体代码的完整列表(搜索“Type:variant”)。

    Locale 例如,Java SE运行时环境中可用的一些支持的变体表示替代的文化行为,如日历类型或数字脚本。 在BCP 47中,这种不能识别语言的信息受到扩展子标签或私有使用子标签的支持。

    形状良好的变体值的形式为SUBTAG (('_'|'-') SUBTAG)* ,其中SUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8} (注意:BCP 47只使用连字符(' - ')作为分隔符,这个更宽松)。
    示例:“polyton”(Polytonic Greek),“POSIX”
    extensions
    从单个字符键到字符串值的映射,指示除了语言识别之外的扩展。 Locale 扩展名不区分大小写,但是Locale所有扩展键和值规范化为小写。 请注意,扩展名不能有空值。
    [0-9a-zA-Z]键是[0-9a-zA-Z]中的单个字符。 格式SUBTAG ('-' SUBTAG)*值为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”
    注意:虽然BCP 47需要在IANA语言分条注册表中注册字段值,但Locale类不提供任何验证功能。 Builder只检查一个字段是否满足句法要求(格式良好),但不验证值本身。 详见Locale.Builder

    Unicode locale/language extension

    UTS#35,“Unicode语言环境数据标记语言”定义了可选属性和关键字来覆盖或改进与语言环境相关联的默认行为。 关键字由一对键和类型表示。 例如,“nu-thai”表示泰国本地数字(值:“thai”)应用于格式化数字(键:“nu”)。

    新新新新新新旗新新新旗新新旗新新新旗新新旗新新新旗新新旗旗新新旗新新旗200新新新新旗新新旗旗新新旗新新200新新新旗200新新新新旗新新200新新200新新新新旗新新200新新200新新新200新新200新新200新新200新新新200新新200新新新200新新200新新新200新新200新新200新新200新新新200新新200新新新200新新200 上述例子“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} ('-' [0-9a-zA-Z]{3,8})* )。 一个格式良好的区域设置属性的格式为[0-9a-zA-Z]{3,8} (它是一个单独的子标签,具有与区域设置类型子标签相同的形式)。

    Unicode区域设置扩展名指定区域设置敏感服务中的可选行为。 虽然LDML规范定义了各种键和值,Java运行时环境中的实际区域设置敏感的服务实现可能不支持任何特定的Unicode区域设置属性或键/类型对。

    创建区域设置

    有几种不同的方法来创建一个Locale对象。

    生成器

    使用Locale.Builder你可以构造一个Locale对象符合BCP 47语法。

    构造函数

    Locale类提供三个构造函数:

         Locale(String language)
         Locale(String language, String country)
         Locale(String language, String country, String variant)
     
    这些构造函数允许您使用语言,国家和变体创建Locale对象,但不能指定脚本或扩展名。
    工厂方法

    200新 Locale -45 旗新新新新200新新旗新新新新新新新新新旗200新新200 200 200新新200新200新200新新200新新200新新200新新新200新新200新新旗200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新200新新旗 Locale

    区域常数

    Locale类提供了一些方便的常量,可用于为常用的区域设置创建Locale对象。 例如,以下内容为美国创建一个Locale对象:

         Locale.US
     

    Locale Matching

    如果应用程序或系统被国际化并为多个区域设置提供本地化资源,则有时需要找到满足每个用户的特定偏好的一个或多个区域设置(或语言标签)。 请注意,术语“语言标签”可与本地区匹配文档中的“区域设置”互换使用。

    为了使用户的首选语言环境与一组语言标签相匹配, RFC 4647 Matching of Language Tags定义了两种机制:过滤和查找。 过滤用于获取所有匹配的区域设置,而查找是选择最匹配的区域设置。 匹配是不区分大小写的。 这些匹配机制将在以下部分中介绍。

    用户的偏好被称为语言优先级列表 ,并且表示为语言范围的列表。 语法上有两种语言范围:基本和扩展。 详见Locale.LanguageRange

    过滤

    过滤操作返回所有匹配的语言标签。 它在RFC 4647中定义如下:“在过滤中,每个语言范围代表最不特定的语言标签(即具有最少子标签的语言标签),这是可接受的匹配。匹配集合中的所有语言标签的标签将具有与语言范围相同或更多的子标签,语言范围中的每个非通配符子标签都将显示在每个匹配的语言标签中。

    有两种类型的过滤:基本语言范围的过滤(称为“基本过滤”)和扩展语言范围的过滤(称为“扩展过滤”)。 他们可能会通过在给定的语言优先级列表中包含什么样的语言范围来返回不同的结果。 Locale.FilteringMode是一个参数,用于指定如何进行过滤。

    抬头

    查找操作返回最匹配的语言标签。 它在RFC 4647中定义如下:“与过滤相反,每个语言范围代表最可访问匹配的最具体的标签,根据用户的优先级,找到的第一个匹配标签被认为是最接近的匹配项,回。”

    例如,如果语言优先级列表由两个语言范围"zh-Hant-TW""en-US" ,按照优先次序,查找方法逐渐搜索下面的语言标签,以便找到最佳匹配语言标签。

        1. zh-Hant-TW
        2. zh-Hant
        3. zh
        4. en-US
        5. en
     
    如果语言标签与上述语言范围完全匹配,则返回语言标签。

    "*"是特殊的语言范围,在查找中被忽略。

    作为语言范围中包含的子标签'*'的结果,如果多个语言标签相匹配, '*'返回的Iterator超过Collection的语言标签的第一匹配语言标签被视为最佳匹配语言标签。

    使用区域设置

    一旦你创建了一个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)
     
    A Locale是用于识别您想要获得的对象的种类( NumberFormat )的机制。 区域设置只是用于识别对象的机制, 而不是对象本身的容器。

    兼容性

    为了保持与现有使用的兼容性,Locale的构造函数在Java Runtime Environment 1.7之前保留其行为。 对于toString方法也是如此。 因此,区域设置对象可以继续使用。 特别是,将toString的输出解析为语言,国家和变体字段的客户端可以继续这样做(尽管这是非常不鼓励的),尽管如果存在脚本或扩展,变体字段将具有其他信息。

    此外,BCP 47强加了Locale的构造函数不强加的语法限制。 这意味着在不丢失信息的情况下,无法进行某些区域设置和BCP 47语言标记之间的转换。 因此, toLanguageTag不能代表其语言,国家或变体不符合BCP 47的语言环境的状态。

    由于这些问题,建议客户端迁移构建不合格的区域设置,并使用forLanguageTagLocale.Builder API。 因此,希望完整语言环境的字符串表示的客户端可以始终依赖于toLanguageTag

    Special cases

    出于兼容性原因,两个不合格的区域设置被视为特殊情况。 这些是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 (对于“number”)和值thai 当使用参数“th”,“TH”,“TH”调用Locale构造函数时,会自动添加扩展名“u-nu-thai”。

    序列化

    在序列化期间,writeObject将所有字段写入输出流,包括扩展。

    在反序列化期间,readResolve会按照Special Cases中的说明添加扩展,仅适用于th_TH_TH和ja_JP_JP两种情况。

    传统语言代码

    语言环境的构造一直变换的三个语言代码到其以前的,过时的形式: he映射到iwyi映射到ji ,并id映射到in 这种情况依然如此,为了不破坏兼容性。

    这些API在新旧语言代码之间的1.7地图中添加,并将旧代码保留在Locale内部(以便getLanguagetoString反映旧代码),但是使用BCP 47语言标签API中的新代码(以便toLanguageTag反映新的那一个)。 无论使用哪个代码或API来构造它们,都可以保持区域设置之间的等价性。 Java的默认资源包查找机制也实现了这种映射,因此可以使用任何一种约定命名资源,参见ResourceBundle.Control

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

    Locale构造函数一直指定语言和国家参数长度为两个字符,但实际上它们已经接受了任何长度。 该规范现已放宽,允许2至8个字符的语言代码和2到3个字符的国家(地区)代码,特别是IANA语言分条注册表中指定的三个字母的语言代码和三位数区域代码。 为了兼容性,实现仍然不会强加长度约束。

    从以下版本开始:
    1.1
    另请参见:
    Locale.BuilderResourceBundleFormatNumberFormatCollatorSerialized Form
    • 字段详细信息

      • 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
        对国家有用的常数。
      • CHINA

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

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

        public static final Locale TAIWAN
        对国家有用的常数。
      • 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
        根区域的常用常数。 根语言环境是语言,国家和变体为空(“”)字符串的语言环境。 这被视为所有语言环境的基础语言环境,并被用作语言/国家中立语言环境的区域敏感操作。
        从以下版本开始:
        1.6
    • 构造方法详细信息

      • Locale

        public Locale​(String language,
                      String country,
                      String variant)
        从语言,国家和变体构建语言环境。 该构造函数将语言值规范化为小写,将国家值标准化为大写。

        注意:

        • ISO 639不是一个稳定的标准; 它定义的一些语言代码(特别是“iw”,“ji”和“in”)已经改变了。 此构造函数接受旧代码(“iw”,“ji”和“in”)和新代码(“he”,“yi”和“id”),但所有其他API在Locale上将仅返回OLD代码。
        • 由于向后兼容性原因,此构造函数不对输入进行任何语法检查。
        • 特殊处理两种情况(“ja”,“JP”,“JP”)和(“th”,“TH”,“TH”),详情请参阅Special Cases
        参数
        language - ISO 639 alpha-2或alpha-3语言代码或最多8个字符的语言子标签。 请参阅有关有效语言值的Locale类描述。
        country - ISO 3166 alpha-2国家代码或UN M.49数字-3区号。 请参阅有关有效国家/地区值的Locale类描述。
        variant - 用于指示Locale的变体的任意值。 详见Locale课程说明。
        异常
        NullPointerException - 如果任何参数为空,则抛出。
      • Locale

        public Locale​(String language,
                      String country)
        从语言和国家构建语言环境。 该构造函数将语言值规范化为小写,将国家值标准化为大写。

        注意:

        • ISO 639不是一个稳定的标准; 它定义的一些语言代码(特别是“iw”,“ji”和“in”)已经改变了。 此构造函数接受旧代码(“iw”,“ji”和“in”)和新代码(“he”,“yi”和“id”),但所有其他API在Locale上将仅返回OLD代码。
        • 由于向后兼容性原因,此构造函数不对输入进行任何语法检查。
        参数
        language - ISO 639 alpha-2或alpha-3语言代码或最多8个字符的语言子标签。 请参阅有关有效语言值的Locale类描述。
        country - ISO 3166 alpha-2国家代码或UN M.49数字-3区号。 请参阅有关有效国家/地区值的Locale类描述。
        异常
        NullPointerException - 如果任一参数为空,则抛出。
      • Locale

        public Locale​(String language)
        从语言代码构建语言环境。 该构造函数将语言值规范化为小写。

        注意:

        • ISO 639不是一个稳定的标准; 它定义的一些语言代码(特别是“iw”,“ji”和“in”)已经改变了。 此构造函数接受旧代码(“iw”,“ji”和“in”)和新代码(“he”,“yi”和“id”),但所有其他API在Locale上将仅返回OLD代码。
        • 由于向后兼容性原因,此构造函数不对输入进行任何语法检查。
        参数
        language - ISO 639 alpha-2或alpha-3语言代码或最多8个字符的语言子标签。 请参阅有关有效语言值的Locale类描述。
        异常
        NullPointerException - 如果参数为null,则抛出。
        从以下版本开始:
        1.4
    • 方法详细信息

      • 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 - 如果category为null
        从以下版本开始:
        1.7
        另请参见:
        setDefault(Locale.Category, Locale)
      • setDefault

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

        如果有安全管理器,则在默认语言环境更改之前,其checkPermission方法将被调用PropertyPermission("user.language", "write")权限。

        Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。

        因为更改默认语言环境可能会影响许多不同的功能区域,所以只有在调用者准备重新初始化同一Java虚拟机中运行的区域设置敏感代码时,才应使用此方法。

        通过使用此方法设置默认语言环境,每个类别的所有默认语言环境也将设置为指定的默认语言环境。

        参数
        newLocale - 新的默认语言环境
        异常
        SecurityException - 如果存在安全管理员,并且其 checkPermission方法不允许操作。
        NullPointerException - 如果 newLocale为空
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)PropertyPermission
      • setDefault

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

        如果有安全管理器,则在默认语言环境更改之前,将使用PropertyPermission(“user.language”,“write”)权限调用其checkPermission方法。

        Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。

        因为更改默认语言环境可能会影响许多不同的功能区域,所以只有在调用者准备重新初始化同一Java虚拟机中运行的区域设置敏感代码时,才应使用此方法。

        参数
        category - - 设置默认语言环境的指定类别
        newLocale - - 新的默认语言环境
        异常
        SecurityException - 如果安全管理器存在,并且其checkPermission方法不允许该操作。
        NullPointerException - 如果category和/或newLocale为null
        从以下版本开始:
        1.7
        另请参见:
        SecurityManager.checkPermission(java.security.Permission)PropertyPermissiongetDefault(Locale.Category)
      • getAvailableLocales

        public static Locale[] getAvailableLocales​()
        返回所有已安装区域设置的数组。 返回的数组表示由Java运行时环境支持的语言环境的联合以及安装的LocaleServiceProvider实现。 它必须至少包含一个等于Locale.USLocale实例。
        结果
        一组已安装的区域设置。
      • getISOLanguages

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

        注意:

        • ISO 639不是一个稳定的标准 - 一些语言的代码已经改变。 此函数返回的列表包括代码已更改的语言的新旧代码。
        • Locale类还支持长达8个字符的语言代码。 因此,此方法返回的列表不包含可用于创建区域设置的所有有效代码。
        结果
        一组ISO 639双字母语言代码。
      • getLanguage

        public String getLanguage​()
        返回此区域设置的语言代码。

        注意: ISO 639不是一个稳定的标准 - 一些语言的代码已经改变。 Locale的构造函数识别代码已更改的语言的新旧代码,但此函数始终返回旧代码。 如果要检查其代码已更改的特定语言,请勿执行

          if (locale.getLanguage().equals("he")) // BAD!
            ... 
        相反,做
          if (locale.getLanguage().equals(new Locale("he").getLanguage()))
            ... 
        结果
        语言代码,如果没有定义,则为空字符串。
        另请参见:
        getDisplayLanguage()
      • getScript

        public String getScript​()
        返回此语言环境的脚本,该脚本应为空字符串或ISO 15924 4字母脚本代码。 第一个字母是大写字母,其余的是小写字母,例如“Latn”,“Cyrl”。
        结果
        脚本代码,或空字符串,如果没有定义。
        从以下版本开始:
        1.7
        另请参见:
        getDisplayScript()
      • getCountry

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

        public String getVariant​()
        返回此区域设置的变体代码。
        结果
        变量代码,如果没有定义,则为空字符串。
        另请参见:
        getDisplayVariant()
      • hasExtensions

        public boolean hasExtensions​()
        如果这个 Localetrue则返回 true
        结果
        true如果这 Locale有任何扩展
        从以下版本开始:
        1.8
      • stripExtensions

        public Locale stripExtensions​()
        返回此Locale的副本,不包括extensions 如果此Locale没有扩展,则返回此Locale
        结果
        Locale的副本,无扩展名,或 this如果 this没有扩展名
        从以下版本开始:
        1.8
      • getExtension

        public String getExtension​(char key)
        返回与指定键相关联的扩展名(或私有使用)值,如果没有与密钥关联的扩展名,则返回null。 要形成良好的关键,必须是[0-9A-Za-z] 键不区分大小写,因此例如“z”和“Z”表示相同的扩展名。
        参数
        key - 扩展键
        结果
        扩展名,如果此区域设置不指定指定键的扩展名,则为null。
        异常
        IllegalArgumentException - 如果密钥 IllegalArgumentException不正确
        从以下版本开始:
        1.7
        另请参见:
        PRIVATE_USE_EXTENSIONUNICODE_LOCALE_EXTENSION
      • 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区域设置类型,如果区域设置未定义密钥,则为空。
        异常
        IllegalArgumentException - 如果密钥 IllegalArgumentException不正确
        NullPointerException - 如果 key为空
        从以下版本开始:
        1.7
      • getUnicodeLocaleKeys

        public Set<String> getUnicodeLocaleKeys​()
        返回此区域设置定义的Unicode区域设置键的集合,如果此区域设置没有,则返回空集合。 返回的集是不可变的。 钥匙都是小写字母。
        结果
        Unicode区域设置键的集合,如果此区域设置没有Unicode区域设置关键字,则为空集。
        从以下版本开始:
        1.7
      • toString

        public final String toString​()
        返回此Locale对象的字符串表示形式,由语言,国家/地区,变体,脚本和扩展名组成,如下所示:
        language + "_" + country + "_" + (variant + "_#" | "#") + script + "_" + extensions
        语言总是小写,国家总是大写,脚本总是标题,扩展总是小写。 扩展和私有使用子标签将按照规范顺序排列,如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
        重写:
        toStringObject
        结果
        用于调试的语言环境的字符串表示形式。
        另请参见:
        getDisplayName()toLanguageTag()
      • toLanguageTag

        public String toLanguageTag​()
        返回一个格式正确的IETF BCP 47语言标签,代表这个区域。

        如果此Locale具有不满足IETF BCP 47语言标签语法要求的语言,国家或变体,则此方法将按如下所述处理这些字段:

        语言:如果语言为空,或者不是well-formed (例如“a”或“e2”),则将以“und”(未确定)的形式发出。

        国家:如果国家不是well-formed (例如“12”或“美国”),将省略。

        变式:如果变量 well-formed ,则每个子段(以' - '或'_'分隔)作为子标签发出。 除此以外:

        • 如果所有子分段匹配[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”和挪威Nynorsk(挪威)的变体“NY”被转换为语言标签“nn-NO”。

        注意:虽然由此方法创建的语言标签格式正确(满足IETF BCP 47规范定义的语法要求),但并不一定是有效的BCP 47语言标记。 例如,

          new Locale("xx", "YY").toLanguageTag(); 
        将返回“xx-yy”,但是语言子标签“xx”和区域子标签“YY”无效,因为它们未注册在IANA语言子标签注册表中。
        结果
        一个表示该区域的BCP47语言标签
        从以下版本开始:
        1.7
        另请参见:
        forLanguageTag(String)
      • forLanguageTag

        public static Locale forLanguageTag​(String languageTag)
        返回指定的IETF BCP 47语言标记字符串的语言环境。

        如果指定的语言标签包含任何不正确的子标签,则忽略第一个这样的子标签和所有后续子标签。 Locale.Builder.setLanguageTag(java.lang.String)相比 ,在这种情况下会引发异常。

        执行以下转换

        • 语言代码“und”映射到语言“”。
        • 语言代码“he”,“yi”和“id”分别映射到“iw”,“ji”和“in”。 (这是在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" 
        • 除了不变的变量标签外,情况被归一化。 语言标准化为小写,脚本到标题,国家大写,小写扩展。
        • 如果在处理之后,区域设置将与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的“语言标签”生成,因此支持grandfathered(常规和不规则)以及私人使用语言标签。 独立的私人使用标签被表示为空语言和扩展名“x-whatever”,并且旧的标签被转换为它们存在的规范替换。

        具有标准替代品的Grandfathered标签如下:

        Grandfathered tags with canonical replacements grandfathered tag modern replacement 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

        没有现代更换的Grandfathered标签将转换如下:

        Grandfathered tags with no modern replacement grandfathered tag converts to 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语言分条注册表(搜索“类型:grandfathered”)。

        注意 :不保证toLanguageTagforLanguageTag将往返。

        参数
        languageTag - 语言标签
        结果
        最能代表语言标签的地区。
        异常
        NullPointerException - 如果 languageTagnull
        从以下版本开始:
        1.7
        另请参见:
        toLanguageTag()Locale.Builder.setLanguageTag(String)
      • getISO3Language

        public String getISO3Language​()
                               throws MissingResourceException
        返回此语言环境的三个字母缩写。 如果语言符合ISO 639-1双字母代码,则返回相应的ISO 639-2 / T三字母小写代码。 ISO 639-2语言代码可以在线查看,请参见“语言名称代码第2部分:Alpha-3代码”。 如果语言环境指定了三个字母的语言,则会按原样返回该语言。 如果语言环境未指定语言,则返回空字符串。
        结果
        这个语言环境的三个字母缩写。
        异常
        MissingResourceException - 如果三个字母的语言缩写不适用于此语言环境,则抛出MissingResourceException异常。
      • getISO3Country

        public String getISO3Country​()
                              throws MissingResourceException
        返回此区域设置的国家/地区的三个字母的缩写。 如果国家符合ISO 3166-1 alpha-2代码,则返回相应的ISO 3166-1 alpha-3大写代码。 如果语言环境没有指定国家,这将是空字符串。

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

        结果
        这个地区的国家的三个字母的缩写。
        异常
        MissingResourceException - 如果三个字母的国家/地区缩写不适用于此语言环境,则抛出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)
        返回适合显示给用户的语言环境语言的名称。 如果可能,返回的名称将根据“地址”进行本地化。 例如,如果语言环境是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)
        返回适合显示给用户的区域设置国家/地区的名称。 如果可能,返回的名称将根据“地址”进行本地化。 例如,如果语言环境是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)
        返回适合显示给用户的区域设置变体代码的名称。 如果可能,该名称将在本地化为在Locale。 如果语言环境未指定变体代码,则此函数返回空字符串。
        参数
        inLocale - 用于检索显示变体代码的区域设置。
        结果
        适用于给定语言环境的显示变体代码的名称。
        异常
        NullPointerException - 如果 inLocalenull
      • getDisplayName

        public final String getDisplayName​()
        返回适合显示给用户的区域设置的名称。 这将是getDisplayLanguage(),getDisplayScript(),getDisplayCountry()和getDisplayVariant()返回的值组合成一个字符串。 非空值按顺序使用,第二个和后续名称在括号中。 例如:
        language (script, country, variant)
        language (country)
        language (variant)
        script (country)
        country
        取决于在区域设置中指定的字段。 如果语言,脚本,国家和变体字段都为空,则此函数返回空字符串。
        结果
        适合显示的区域的名称。
      • getDisplayName

        public String getDisplayName​(Locale inLocale)
        返回适合显示给用户的区域设置的名称。 这将是getDisplayLanguage(),getDisplayScript(),getDisplayCountry()和getDisplayVariant()返回的值组合成一个字符串。 非空值按顺序使用,第二个和后续名称在括号中。 例如:
        language (script, country, variant)
        language (country)
        language (variant)
        script (country)
        country
        取决于在区域设置中指定的字段。 如果语言,脚本,国家和变体字段都为空,则此函数返回空字符串。
        参数
        inLocale - 要检索显示名称的区域设置。
        结果
        适合显示的区域的名称。
        异常
        NullPointerException - 如果 inLocalenull
      • clone

        public Object clone​()
        覆盖可克隆。
        重写:
        cloneObject
        结果
        这个实例的一个克隆。
        另请参见:
        Cloneable
      • equals

        public boolean equals​(Object obj)
        如果此区域设置等于另一个对象,则返回true。 语言区域被视为与另一个具有相同语言,脚本,国家,变体和扩展名的区域设置相同,并且与所有其他对象不相等。
        重写:
        equalsObject
        参数
        obj - 用于比较的参考对象。
        结果
        如果此区域设置等于指定的对象,则为true。
        另请参见:
        Object.hashCode()HashMap
      • filter

        public static List<Locale> filter​(List<Locale.LanguageRange> priorityList,
                                          Collection<Locale> locales,
                                          Locale.FilteringMode mode)
        使用RFC 4647中定义的过滤机制返回匹配的 Locale实例的列表。
        参数
        priorityList - 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序
        locales - Locale用于匹配的实例
        mode - 过滤模式
        结果
        一个Locale实例的列表,用于匹配按照优先级或权重降序排序的语言标签,如果没有匹配,则为空列表。 列表是可修改的。
        异常
        NullPointerException - 如果 priorityListlocalesnull
        IllegalArgumentException - 如果在指定 Locale.FilteringMode.REJECT_EXTENDED_RANGES时给定列表中包含一个或多个扩展语言范围
        从以下版本开始:
        1.8
      • lookup

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

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