模块  java.base
软件包  java.util

Class Locale

  • 实现的所有接口
    SerializableCloneable

    public final class Locale
    extends Object
    implements Cloneable, Serializable
    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兼容的语言环境数据交换扩展。

    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”(Konkani)
    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”(Polytonic Greek),“POSIX”
    extensions
    从单个字符键到字符串值的映射,指示除语言标识之外的扩展。 Locale的扩展实现了BCP 47扩展子标签和私有子标签的语义和语法。 扩展名不区分大小写,但Locale所有扩展键和值规范化为小写。 请注意,扩展名不能包含空值。
    [0-9a-zA-Z]良好的键是[0-9a-zA-Z]中的单个字符。 格式良好的值的格式为SUBTAG ('-' SUBTAG)* ,其中键' 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”表示应使用泰语本地数字(值:“泰语”)来格式化数字(键:“nu”)。

    使用扩展键“u”( UNICODE_LOCALE_EXTENSION )将关键字映射到BCP 47扩展值。 上面的例子“nu-thai”成为“u-nu-thai”的延伸。

    因此,当Locale对象包含Unicode语言环境属性和关键字时, getExtension(UNICODE_LOCALE_EXTENSION)将返回表示此信息的String,例如“nu-thai”。 Locale类还提供getUnicodeLocaleAttributes()getUnicodeLocaleKeys()getUnicodeLocaleType(java.lang.String) ,让你可以直接访问Unicode语言环境属性和关键/类型对。 当表示为字符串时,Unicode Locale Extension按字母顺序列出属性,后跟按键/类型序列,按键按字母顺序列出(定义类型时,包含键类型的子标签的顺序是固定的)

    格式[0-9a-zA-Z]{2}区域设置键的格式为[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 Runtime Environment中的实际区域设置敏感服务实现可能不支持任何特定的Unicode语言环境属性或键/类型对。

    创建区域设置

    有几种不同的方法可以创建Locale对象。

    生成器

    使用Locale.Builder您可以构造符合BCP 47语法的Locale对象。

    构造函数

    Locale类提供了三个构造函数:

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

    方法forLanguageTag(java.lang.String)Locale良好的BCP 47语言标签创建Locale对象。

    区域设置常量

    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"组成, "zh-Hant-TW"优先顺序,查找方法逐步搜索下面的语言标记,以便找到最佳匹配语言标记。

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

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

    如果有多个语言标签匹配作为子标记的结果'*'包括在语言范围内,所述第一匹配的语言标记由一个返回IteratorCollection语言标记的被视为最佳匹配之一。

    使用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 Runtime Environment 1.7版之前保留其行为。 toString方法也是如此。 因此,Locale对象可以继续按原样使用。 特别是,将toString的输出解析为语言,国家和变体字段的客户端可以继续这样做(尽管强烈建议不要这样做),尽管如果存在脚本或扩展,变体字段中将包含其他信息。

    此外,BCP 47强加了语法限制,而不是Locale的构造函数强加的。 这意味着无法在不丢失信息的情况下进行某些Locales和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语言环境键nu (“number”)和值thai ,可以使用Unicode语言环境扩展来thai 当使用参数“th”,“TH”,“TH”调用Locale构造函数时,会自动添加扩展名“u-nu-thai”。

    序列化

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

    在反序列化期间,readResolve添加扩展,如Special Cases中所述 ,仅针对th_TH_TH和ja_JP_JP这两种情况。

    旧版语言代码

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

    1.7中添加的API映射旧语言代码和新语言代码,维护旧代码内部的Locale(以便getLanguagetoString反映旧代码),但使用BCP 47语言标记API中的新代码(以便toLanguageTag反映新的那一个)。 无论使用哪种代码或API来构造它们,这都会保留Locales之间的等价性。 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”),但Locale上的所有其他API将仅返回旧代码。
        • 出于向后兼容性原因,此构造函数不对输入进行任何语法检查。
        • 两种情况(“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 - 如果任何参数为null,则抛出。
      • Locale

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

        注意:

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

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

        注意:

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

      • getDefault

        public static Locale getDefault()
        获取此Java虚拟机实例的缺省语言环境的当前值。

        Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果未明确指定语言环境,则许多语言环境敏感方法使用它。 可以使用setDefault方法更改它。

        结果
        此虚拟机实例的缺省语言环境
      • getDefault

        public static Locale getDefault​(Locale.Category category)
        获取此Java虚拟机实例的指定类别的缺省语言环境的当前值。

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

        参数
        category - - 获取默认语言环境的指定类别
        结果
        此虚拟机实例的指定类别的缺省语言环境
        异常
        NullPointerException - 如果category为null
        从以下版本开始:
        1.7
        另请参见:
        setDefault(Locale.Category, Locale)
      • setDefault

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

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

        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实例,等于Locale.US
        结果
        一系列已安装的语言环境。
      • getISOLanguages

        public static String[] getISOLanguages()
        返回ISO 639中定义的所有双字母语言代码的列表。可用于创建语言环境。

        注意:

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

        public String getLanguage()
        返回此Locale的语言代码。

        注意: 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()
        返回 true如果此 Locale有任何 extensions
        结果
        true若有 Locale有任何扩展
        从以下版本开始:
        1.8
      • stripExtensions

        public Locale stripExtensions()
        返回此Locale的副本,没有extensions 如果这Locale没有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语言环境类型,如果语言环境未定义键,则为null。
        异常
        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兼容。 要将Locale表示为字符串以进行交换,请使用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
        结果
        Locale的字符串表示形式,用于调试。
        另请参见:
        getDisplayName()toLanguageTag()
      • toLanguageTag

        public String toLanguageTag()
        返回表示此区域设置的格式良好的IETF BCP 47语言标记。

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

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

        国家/地区:如果国家/地区不是well-formed (例如“12”或“USA”),则将省略。

        变体:如果变体 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”和变体“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标签如下:

        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语言子标记注册表(搜索“Type: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)
        返回适合显示给用户的语言环境语言的名称。 如果可能,返回的名称将根据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 extensions组合成单个字符串的值。 非空值按顺序使用,括号中的第二个和后续名称。 例如:
        language (script, country, variant(, extension)*)
        language (country(, extension)*)
        language (variant(, extension)*)
        script (country(, extension)*)
        country (extension)*
        取决于区域设置中指定的字段。 上述括号中的字段分隔符(表示为逗号字符)可以根据区域设置进行本地化。 如果语言,脚本,国家/地区和变体字段都为空,则此函数返回空字符串。
        结果
        适合显示的语言环境的名称。
      • getDisplayName

        public String getDisplayName​(Locale inLocale)
        返回适合显示给用户的语言环境的名称。 这将是getDisplayLanguage(),getDisplayScript(),getDisplayCountry()getDisplayVariant()和可选Unicode extensions组合成单个字符串的值。 非空值按顺序使用,括号中的第二个和后续名称。 例如:
        language (script, country, variant(, extension)*)
        language (country(, extension)*)
        language (variant(, extension)*)
        script (country(, extension)*)
        country (extension)*
        取决于区域设置中指定的字段。 上述括号中的字段分隔符(表示为逗号字符)可以根据区域设置进行本地化。 如果语言,脚本,国家/地区和变体字段都为空,则此函数返回空字符串。
        参数
        inLocale - 要检索显示名称的语言环境。
        结果
        适合显示的语言环境的名称。
        异常
        NullPointerException - 如果 inLocalenull
      • clone

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

        public boolean equals​(Object obj)
        如果此Locale等于另一个对象,则返回true。 区域设置被视为与具有相同语言,脚本,国家/地区,变体和扩展名的其他区域设置相同,并且与所有其他对象不相等。
        重写:
        equals在类 Object
        参数
        obj - 要与之比较的引用对象。
        结果
        如果此Locale等于指定的对象,则返回true。
        另请参见:
        Object.hashCode()HashMap
      • 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实例列表,如果没有匹配Locale空列表排序。 该列表是可修改的。
        异常
        NullPointerException - 如果 priorityListlocalesnull
        IllegalArgumentException - 如果指定了 Locale.FilteringMode.REJECT_EXTENDED_RANGES ,则给定列表中包含一个或多个扩展语言范围
        从以下版本开始:
        1.8
      • filter

        public static List<Locale> filter​(List<Locale.LanguageRange> priorityList,
                                          Collection<Locale> locales)
        返回匹配的列表Locale使用RFC 4647这等同所限定的过滤机制,以实例filter(List, Collection, FilteringMode)modeLocale.FilteringMode.AUTOSELECT_FILTERING 对给定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”是否匹配, tags重复匹配标签“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。这相当于定义了基本的过滤机制来匹配语言标签的列表filterTags(List, Collection, FilteringMode)modeLocale.FilteringMode.AUTOSELECT_FILTERING 对给定tags此过滤操作可确保仅返回具有保留大小写的唯一匹配标记。 如果具有大小写差异的重复匹配标记,则返回具有保留大小写的第一个匹配标记。 例如,如果在给定的tags首先检查“de-ch”以进行匹配, tags重复匹配标签“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 - 如果 priorityListtagsnull
        从以下版本开始:
        1.8
      • lookupTag

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