Most visited

Recently visited

Added in API level 1

Locale

public final class Locale
extends Object implements Cloneable, Serializable

java.lang.Object
   ↳ java.util.Locale


一个Locale对象代表一个特定的地理,政治或文化区域。 需要Locale执行其任务的操作称为区域设置敏感,并使用Locale来为用户定制信息。 例如,显示一个数字是一个区域敏感的操作 - 数字应根据用户所在国家,地区或文化的惯例和惯例进行格式化。

Locale类实现了与BCP 47(IETF BCP 47,“用于识别语言的标签”)可互换的标识符,并支持用于区域数据交换的LDML(UTS#35,“Unicode区域设置数据标记语言”)BCP 47兼容扩展。

一个 Locale对象逻辑上由下面描述的字段组成。

language
ISO 639 alpha-2 or alpha-3 language code, or registered language subtags up to 8 alpha letters (for future enhancements). When a language has both an alpha-2 code and an alpha-3 code, the alpha-2 code must be used. You can find a full list of valid language codes in the IANA Language Subtag Registry (search for "Type: language"). The language field is case insensitive, but Locale always canonicalizes to lower case.

Well-formed language values have the form [a-zA-Z]{2,8}. Note that this is not the the full BCP47 language production, since it excludes extlang. They are not needed since modern three-letter language codes replace them.

Example: "en" (English), "ja" (Japanese), "kok" (Konkani)

script
ISO 15924 alpha-4 script code. You can find a full list of valid script codes in the IANA Language Subtag Registry (search for "Type: script"). The script field is case insensitive, but Locale always canonicalizes to title case (the first letter is upper case and the rest of the letters are lower case).

Well-formed script values have the form [a-zA-Z]{4}

Example: "Latn" (Latin), "Cyrl" (Cyrillic)

country (region)
ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code. You can find a full list of valid country and region codes in the IANA Language Subtag Registry (search for "Type: region"). The country (region) field is case insensitive, but Locale always canonicalizes to upper case.

Well-formed country/region values have the form [a-zA-Z]{2} | [0-9]{3}

Example: "US" (United States), "FR" (France), "029" (Caribbean)

variant
Any arbitrary value used to indicate a variation of a Locale. Where there are two or more variant values each indicating its own semantics, these values should be ordered by importance, with most important first, separated by underscore('_'). The variant field is case sensitive.

Note: IETF BCP 47 places syntactic restrictions on variant subtags. Also BCP 47 subtags are strictly used to indicate additional variations that define a language or its dialects that are not covered by any combinations of language, script and region subtags. You can find a full list of valid variant codes in the IANA Language Subtag Registry (search for "Type: variant").

然而, Locale的变体字段历来被用于任何类型的变体,而不仅仅是语言变体。 例如,Java SE运行时环境中可用的一些受支持的变体指示替代文化行为,例如日历类型或编号脚本。 在BCP 47中,这种不标识语言的信息由扩展子标签或私人使用子标签支持。


Well-formed variant values have the form SUBTAG (('_'|'-') SUBTAG)* where SUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}. (Note: BCP 47 only uses hyphen ('-') as a delimiter, this is more lenient).

Example: "polyton" (Polytonic Greek), "POSIX"

extensions
A map from single character keys to string values, indicating extensions apart from language identification. The extensions in Locale implement the semantics and syntax of BCP 47 extension subtags and private use subtags. The extensions are case insensitive, but Locale canonicalizes all extension keys and values to lower case. Note that extensions cannot have empty values.

Well-formed keys are single characters from the set [0-9a-zA-Z]. Well-formed values have the form SUBTAG ('-' SUBTAG)* where for the key 'x' SUBTAG = [0-9a-zA-Z]{1,8} and for other keys SUBTAG = [0-9a-zA-Z]{2,8} (that is, 'x' allows single-character subtags).

Example: key="u"/value="ca-japanese" (Japanese Calendar), key="x"/value="java-1-7"
Note: Although BCP 47 requires field values to be registered in the IANA Language Subtag Registry, the Locale class does not provide any validation features. The Builder only checks if an individual field satisfies the syntactic requirement (is well-formed), but does not validate the value itself. See Locale.Builder for details.

Unicode locale/language extension

UTS#35,“Unicode区域设置数据标记语言”定义可选属性和关键字来覆盖或优化与区域设置关联的默认行为。 关键字由一对键和类型表示。 例如,“nu-thai”表示应使用泰文本地数字(值:“泰语”)来格式化数字(键:“nu”)。

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

因此,当Locale对象包含Unicode语言环境属性和关键字时, getExtension(UNICODE_LOCALE_EXTENSION)将返回表示此信息的字符串,例如“nu-thai”。 Locale类还提供getUnicodeLocaleAttributes()getUnicodeLocaleKeys() ,并getUnicodeLocaleType(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区域设置属性或键/类型对。

Creating a Locale

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

Builder

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

构造方法

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

     Locale(String)
     Locale(String, String)
     Locale(String, String, String)
 
These constructors allow you to create a Locale object with language, country and variant, but you cannot specify script or extensions.
Factory Methods

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

Locale Constants

Locale类提供了许多方便的常量,可用于为常用语言环境创建Locale对象。 例如,以下内容将为美国创建一个Locale对象:

     Locale.US
 

Use of Locale

一旦你创建了一个Locale你可以查询它以获取关于它自己的信息。 使用getCountry获取国家(或地区)代码,并使用getLanguage获取语言代码。 您可以使用getDisplayCountry来获取适合向用户显示的国家/地区的名称。 同样,您可以使用getDisplayLanguage来获取适合向用户显示的语言的名称。 有趣的是, getDisplayXXX方法本身是区域敏感的,并有两个版本:一个使用默认语言环境,另一个使用指定的语言环境作为参数。

Java平台提供了许多执行区域敏感操作的类。 例如, NumberFormat类以地区敏感的方式格式化数字,货币和百分比。 类如NumberFormat有几种便捷方法来创建该类型的默认对象。 例如, NumberFormat类提供了三种便捷方法来创建默认的NumberFormat对象:

     NumberFormat.getInstance()
     NumberFormat.getCurrencyInstance()
     NumberFormat.getPercentInstance()
 
Each of these methods has two variants; one with an explicit locale and one without; the latter uses the default locale:
     NumberFormat.getInstance(myLocale)
     NumberFormat.getCurrencyInstance(myLocale)
     NumberFormat.getPercentInstance(myLocale)
 
A Locale is the mechanism for identifying the kind of object ( NumberFormat) that you would like to get. The locale is just a mechanism for identifying objects, not a container for the objects themselves.

Compatibility

为了保持与现有用法的兼容性,Locale的构造函数在Java运行时环境1.7版之前保留其行为。 toString方法基本上也是如此。 因此Locale对象可以继续按照原样使用。 特别是,将toString的输出解析为语言,国家和变体字段的客户可以继续这样做(尽管强烈建议不要这样做),但如果脚本或扩展名存在,variant字段将包含附加信息。

另外,BCP 47强加的语法限制不是由Locale的构造函数施加的。 这意味着某些Locales和BCP 47语言标签之间的转换不能在不丢失信息的情况下进行。 因此toLanguageTag不能表示其语言,国家或变体不符合BCP 47的语言环境的状态。

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

Special cases

出于兼容性原因,两个不合格的语言环境被视为特殊情况。 这些是ja_JP_JPth_TH_TH 由于变体太短,这些在BCP 47中不合格。 为了便于迁移到BCP 47,在施工期间对这些进行了专门处理。 这两种情况(只有这些)会导致构造函数生成扩展,所有其他值的行为与Java 7之前的行为完全相同。

Java已经使用ja_JP_JP来代表日本和日本帝国日历一起在日本使用。 通过指定Unicode区域设置密钥ca (对于“日历”)和类型japanese ,现在可以使用Unicode区域设置扩展来表示 当使用参数“ja”,“JP”,“JP”调用Locale构造函数时,会自动添加扩展名“u-ca-japanese”。

Java使用了th_TH_TH来表示泰国和泰国数字一起使用的泰语。 通过指定Unicode区域设置密钥nu (对于“数字”)和值thai ,现在也可以使用Unicode区域设置扩展来表示 当使用参数“th”,“TH”,“TH”调用Locale构造函数时,会自动添加扩展名“u-nu-thai”。

Serialization

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

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

Legacy language codes

语言环境的构造一直变换的三个语言代码到其以前的,过时的形式:he名映射到iw,yi映射到ji,id名映射到in。 这仍然是这种情况,为了不破坏向后兼容性。

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

Three-letter language/country(region) codes

Locale构造函数一直指定语言和国家参数的长度为两个字符,尽管在实践中它们已经接受了任何长度。 现在已经放宽了规范,允许2到8个字符的语言代码和2到3个字符的国家(地区)代码,尤其是IANA语言子标签注册中心规定的三字母语言代码和三位数地区代码。 为了兼容性,实现仍然没有施加长度约束。

Locale data

请注意,本地数据仅来自ICU。 用户提供的区域设置服务提供程序(使用java.text.spijava.util.spi机制)不受支持。

以下是在各种Android版本中使用的ICU版本(以及相应的CLDR和Unicode版本):

Android 1.5 (Cupcake)/Android 1.6 (Donut)/Android 2.0 (Eclair) ICU 3.8 CLDR 1.5 Unicode 5.0
Android 2.2 (Froyo) ICU 4.2 CLDR 1.7 Unicode 5.1
Android 2.3 (Gingerbread)/Android 3.0 (Honeycomb) ICU 4.4 CLDR 1.8 Unicode 5.2
Android 4.0 (Ice Cream Sandwich) ICU 4.6 CLDR 1.9 Unicode 6.0
Android 4.1 (Jelly Bean) ICU 4.8 CLDR 2.0 Unicode 6.0
Android 4.3 (Jelly Bean MR2) ICU 50 CLDR 22.1 Unicode 6.2
Android 4.4 (KitKat) ICU 51 CLDR 23 Unicode 6.2
Android 5.0 (Lollipop) ICU 53 CLDR 25 Unicode 6.3
Android 6.0 (Marshmallow) ICU 55.1 CLDR 27.0.1 Unicode 7.0

Be wary of the default locale

请注意,有许多便利方法会自动使用默认语言环境,但使用它们可能会导致微妙的错误。

默认语言环境适用于涉及向用户呈现数据的任务。 在这种情况下,您想要使用用户的日期/时间格式,数字格式,转换为小写字母的规则等等。 在这种情况下,使用便利方法是安全的。

默认语言环境不适用于机器可读输出。 最好的选择通常是Locale.US这种语言环境保证在所有设备上都可用,并且它没有令人意外的特殊情况并且经常使用(特别是用于计算机 - 计算机通信)的事实意味着它倾向于最有效的选择。

一个常见的错误是在生成意味着机器可读的输出时隐式使用缺省语言环境。 这往往适用于开发人员的测试设备(特别是因为许多开发人员使用en_US),但在用户处于更复杂的区域设置的设备上运行时会失败。

例如,如果您正在格式化整数,某些语言环境将使用非ASCII十进制数字。 作为另一个例子,如果你正在格式化浮点数,一些locale将使用','作为小数点, '.'作为数字分组。 这对于人类可读的输出是正确的,但是如果提交给另一台计算机可能会导致问题(例如, parseDouble(String)无法解析这样的数字)。 你也应该警惕的toLowerCase()toUpperCase()重载不带走一片Locale :在土耳其,例如,人物'i''I'不会被转换为'I''i' 这是土耳其文本的正确行为(如用户输入),但不适用于HTTP标头。

也可以看看:

Summary

Nested classes

class Locale.Builder

Builder用于根据setters配置的值构建Locale实例。

枚举 Locale.Category

枚举语言环境类别。

Constants

char PRIVATE_USE_EXTENSION

私人用途扩展的关键('x')。

char UNICODE_LOCALE_EXTENSION

Unicode区域扩展的关键('u')。

Fields

public static final Locale CANADA

国家有用的常数。

public static final Locale CANADA_FRENCH

国家有用的常数。

public static final Locale CHINA

国家有用的常数。

public static final Locale CHINESE

有用的语言常数。

public static final Locale ENGLISH

有用的语言常数。

public static final Locale FRANCE

国家有用的常数。

public static final Locale FRENCH

有用的语言常数。

public static final Locale GERMAN

有用的语言常数。

public static final Locale GERMANY

国家有用的常数。

public static final Locale ITALIAN

有用的语言常数。

public static final Locale ITALY

国家有用的常数。

public static final Locale JAPAN

国家有用的常数。

public static final Locale JAPANESE

有用的语言常数。

public static final Locale KOREA

国家有用的常数。

public static final Locale KOREAN

有用的语言常数。

public static final Locale PRC

国家有用的常数。

public static final Locale ROOT

根区域设置的有用常量。

public static final Locale SIMPLIFIED_CHINESE

有用的语言常数。

public static final Locale TAIWAN

国家有用的常数。

public static final Locale TRADITIONAL_CHINESE

有用的语言常数。

public static final Locale UK

国家有用的常数。

public static final Locale US

国家有用的常数。

Public constructors

Locale(String language, String country, String variant)

从语言,国家和变体构建语言环境。

Locale(String language, String country)

从语言和国家构建语言环境。

Locale(String language)

从语言代码构建语言环境。

Public methods

Object clone()

覆盖可复制。

boolean equals(Object obj)

如果此Locale等于另一个对象,则返回true。

static Locale forLanguageTag(String languageTag)

返回指定的IETF BCP 47语言标记字符串的语言环境。

static Locale[] getAvailableLocales()

返回所有已安装语言环境的数组。

String getCountry()

返回此语言环境的国家/地区代码,该代码应该是空字符串,大写ISO 3166 2字母代码或UN M.49 3位代码。

static Locale getDefault(Locale.Category category)

获取Java虚拟机的此实例的指定类别的默认语言环境的当前值。

static Locale getDefault()

获取此Java虚拟机实例的默认语言环境的当前值。

String getDisplayCountry(Locale locale)

返回此语言环境国家的名称,本地化为 locale

final String getDisplayCountry()

返回适合显示给用户的语言环境国家的名称。

String getDisplayLanguage(Locale locale)

返回本地语言的名称,本地化为 locale

final String getDisplayLanguage()

返回适合显示给用户的语言环境语言的名称。

final String getDisplayName()

返回适合显示给用户的语言环境的名称。

String getDisplayName(Locale locale)

返回本地化的语言名称,国家名称和变体,本地化为 locale

String getDisplayScript()

返回适合显示给用户的区域设置脚本的名称。

String getDisplayScript(Locale locale)

返回此语言环境的脚本代码的名称,本地化为 Locale

String getDisplayVariant(Locale locale)

针对此 Locale的变体代码,返回指定 Locale中的完整变体名称。

final String getDisplayVariant()

返回适合向用户显示的区域设置的变体代码的名称。

String getExtension(char key)

返回与指定键关联的扩展名(或私有用途)值,如果没有与键关联的扩展名,则返回null。

Set<Character> getExtensionKeys()

返回与此语言环境相关联的扩展键集合,如果没有扩展名,则返回空集合。

String getISO3Country()

返回此语言环境国家的三字母缩写。

String getISO3Language()

返回此语言环境语言的三字母缩写。

static String[] getISOCountries()

返回ISO 3166中定义的所有双字母国家代码的列表。

static String[] getISOLanguages()

返回ISO 639中定义的所有2字母语言代码的列表。

String getLanguage()

返回此Locale的语言代码。

String getScript()

返回此语言环境的脚本,它应该是空字符串或ISO 15924 4字母脚本代码。

Set<String> getUnicodeLocaleAttributes()

返回与此语言环境相关联的unicode语言环境属性集合,如果没有属性,则返回空集合。

Set<String> getUnicodeLocaleKeys()

返回由此语言环境定义的Unicode区域设置键集合,如果此语言环境没有,则返回空集合。

String getUnicodeLocaleType(String key)

返回与此语言环境的指定Unicode区域设置键相关联的Unicode区域设置类型。

String getVariant()

返回此语言环境的变体代码。

int hashCode()

覆盖hashCode。

static void setDefault(Locale newLocale)

设置此Java虚拟机实例的默认语言环境。

static void setDefault(Locale.Category category, Locale newLocale)

为Java虚拟机的此实例设置指定类别的默认语言环境。

String toLanguageTag()

返回表示此语言环境的格式良好的IETF BCP 47语言标记。

final String toString()

返回此 Locale对象的字符串表示形式,包括语言,国家,变体,脚本和扩展名,如下所示:

language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions
Language is always lower case, country is always upper case, script is always title case, and extensions are always lower case.

Inherited methods

From class java.lang.Object

Constants

PRIVATE_USE_EXTENSION

Added in API level 21
char PRIVATE_USE_EXTENSION

私人用途扩展的关键('x')。

也可以看看:

常量值:120(0x00000078)

UNICODE_LOCALE_EXTENSION

Added in API level 21
char UNICODE_LOCALE_EXTENSION

Unicode区域扩展的关键('u')。

也可以看看:

常量值:117(0x00000075)

Fields

CANADA

Added in API level 1
Locale CANADA

国家有用的常数。

CANADA_FRENCH

Added in API level 1
Locale CANADA_FRENCH

国家有用的常数。

CHINA

Added in API level 1
Locale CHINA

国家有用的常数。

CHINESE

Added in API level 1
Locale CHINESE

有用的语言常数。

ENGLISH

Added in API level 1
Locale ENGLISH

有用的语言常数。

FRANCE

Added in API level 1
Locale FRANCE

国家有用的常数。

FRENCH

Added in API level 1
Locale FRENCH

有用的语言常数。

GERMAN

Added in API level 1
Locale GERMAN

有用的语言常数。

GERMANY

Added in API level 1
Locale GERMANY

国家有用的常数。

ITALIAN

Added in API level 1
Locale ITALIAN

有用的语言常数。

ITALY

Added in API level 1
Locale ITALY

国家有用的常数。

JAPAN

Added in API level 1
Locale JAPAN

国家有用的常数。

JAPANESE

Added in API level 1
Locale JAPANESE

有用的语言常数。

KOREA

Added in API level 1
Locale KOREA

国家有用的常数。

KOREAN

Added in API level 1
Locale KOREAN

有用的语言常数。

PRC

Added in API level 1
Locale PRC

国家有用的常数。

ROOT

Added in API level 9
Locale ROOT

根区域设置的有用常量。 根区域设置是其语言,国家和变体为空(“”)字符串的区域设置。 这被认为是所有语言环境的基本语言环境,并被用作区域敏感操作的语言/国家中性语言环境。

SIMPLIFIED_CHINESE

Added in API level 1
Locale SIMPLIFIED_CHINESE

有用的语言常数。

TAIWAN

Added in API level 1
Locale TAIWAN

国家有用的常数。

TRADITIONAL_CHINESE

Added in API level 1
Locale TRADITIONAL_CHINESE

有用的语言常数。

UK

Added in API level 1
Locale UK

国家有用的常数。

US

Added in API level 1
Locale US

国家有用的常数。

Public constructors

Locale

Added in API level 1
Locale (String language, 
                String country, 
                String variant)

从语言,国家和变体构建语言环境。 此构造函数将语言值标准化为小写,将国家/地区值标准化为大写。

注意:

  • ISO 639 is not a stable standard; some of the language codes it defines (specifically "iw", "ji", and "in") have changed. This constructor accepts both the old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other API on Locale will return only the OLD codes.
  • For backward compatibility reasons, this constructor does not make any syntactic checks on the input.
  • The two cases ("ja", "JP", "JP") and ("th", "TH", "TH") are handled specially, see Special Cases for more information.

Parameters
language String: An ISO 639 alpha-2 or alpha-3 language code, or a language subtag up to 8 characters in length. See the Locale class description about valid language values.
country String: An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. See the Locale class description about valid country values.
variant String: Any arbitrary value used to indicate a variation of a Locale. See the Locale class description for the details.
Throws
NullPointerException thrown if any argument is null.

Locale

Added in API level 1
Locale (String language, 
                String country)

从语言和国家构建语言环境。 此构造函数将语言值标准化为小写,将国家/地区值标准化为大写。

注意:

  • ISO 639 is not a stable standard; some of the language codes it defines (specifically "iw", "ji", and "in") have changed. This constructor accepts both the old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other API on Locale will return only the OLD codes.
  • For backward compatibility reasons, this constructor does not make any syntactic checks on the input.

Parameters
language String: An ISO 639 alpha-2 or alpha-3 language code, or a language subtag up to 8 characters in length. See the Locale class description about valid language values.
country String: An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. See the Locale class description about valid country values.
Throws
NullPointerException thrown if either argument is null.

Locale

Added in API level 1
Locale (String language)

从语言代码构建语言环境。 此构造函数将语言值标准化为小写。

Note:

  • ISO 639 is not a stable standard; some of the language codes it defines (specifically "iw", "ji", and "in") have changed. This constructor accepts both the old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other API on Locale will return only the OLD codes.
  • For backward compatibility reasons, this constructor does not make any syntactic checks on the input.

Parameters
language String: An ISO 639 alpha-2 or alpha-3 language code, or a language subtag up to 8 characters in length. See the Locale class description about valid language values.
Throws
NullPointerException thrown if argument is null.

Public methods

clone

Added in API level 1
Object clone ()

覆盖可复制。

Returns
Object a clone of this instance.

equals

Added in API level 1
boolean equals (Object obj)

如果此Locale等于另一个对象,则返回true。 一个语言环境被认为与另一个具有相同语言,脚本,国家,变体和扩展名的语言环境相同,并且与所有其他对象不相等。

Parameters
obj Object: the reference object with which to compare.
Returns
boolean true if this Locale is equal to the specified object.

forLanguageTag

Added in API level 21
Locale forLanguageTag (String languageTag)

返回指定的IETF BCP 47语言标记字符串的语言环境。

如果指定的语言标签包含任何不合格的子标签,则会忽略第一个此类子标签和所有后续子标签。 与在此情况下引发异常的setLanguageTag(String)进行比较。

执行以下 转换

  • The language code "und" is mapped to language "".
  • The language codes "he", "yi", and "id" are mapped to "iw", "ji", and "in" respectively. (This is the same canonicalization that's done in Locale's constructors.)
  • The portion of a private use subtag prefixed by "lvariant", if any, is removed and appended to the variant field in the result locale (without case normalization). If it is then empty, the private use subtag is discarded:
         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"
     
  • When the languageTag argument contains an extlang subtag, the first such subtag is used as the language, and the primary language subtag and other extlang subtags are ignored:
         Locale.forLanguageTag("ar-aao").getLanguage(); // returns "aao"
         Locale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
     
  • Case is normalized except for variant tags, which are left unchanged. Language is normalized to lower case, script to title case, country to upper case, and extensions to lower case.
  • If, after processing, the locale would exactly match either ja_JP_JP or th_TH_TH with no extensions, the appropriate extensions are added as though the constructor had been called:
        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的'语言标签'生产,因此支持祖父(定期和不定期)以及私人使用的语言标签。 独立的私人使用标签被表示为空语言和扩展名'x-whatever',并且祖先风格的标签被转换为它们存在的规范替换。

带有规范替换的Grandfathered标签如下所示:

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 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语言标签注册表(搜索“类型:祖父”)。

注意 :不能保证 toLanguageTagforLanguageTag会往返。

Parameters
languageTag String: the language tag
Returns
Locale The locale that best represents the language tag.
Throws
NullPointerException if languageTag is null

也可以看看:

getAvailableLocales

Added in API level 1
Locale[] getAvailableLocales ()

返回所有已安装语言环境的数组。 返回的数组表示Java运行时环境支持的语言环境的联合以及安装的LocaleServiceProvider实现。 它必须包含至少一个等于Locale.USLocale实例。

Returns
Locale[] An array of installed locales.

getCountry

Added in API level 1
String getCountry ()

返回此语言环境的国家/地区代码,该代码应该是空字符串,大写ISO 3166 2字母代码或UN M.49 3位代码。

Returns
String The country/region code, or the empty string if none is defined.

也可以看看:

getDefault

Added in API level 24
Locale getDefault (Locale.Category category)

获取Java虚拟机的此实例的指定类别的默认语言环境的当前值。

Java虚拟机根据主机环境设置启动期间的默认区域设置。 如果没有明确指定区域设置,它会被许多区域敏感的方法使用。 它可以使用setDefault(Locale.Category,Locale)方法进行更改。

Parameters
category Locale.Category: - the specified category to get the default locale
Returns
Locale the default locale for the specified Category for this instance of the Java Virtual Machine
Throws
NullPointerException - if category is null

也可以看看:

getDefault

Added in API level 1
Locale getDefault ()

获取此Java虚拟机实例的默认语言环境的当前值。

Java虚拟机根据主机环境设置启动期间的默认区域设置。 如果没有明确指定区域设置,它会被许多区域敏感的方法使用。 可以使用setDefault方法更改它。

Returns
Locale the default locale for this instance of the Java Virtual Machine

getDisplayCountry

Added in API level 1
String getDisplayCountry (Locale locale)

返回此语言环境国家的名称,本地化为locale 如果此语言环境不符合特定国家/地区,则返回空字符串。

Parameters
locale Locale
Returns
String

getDisplayCountry

Added in API level 1
String getDisplayCountry ()

返回适合显示给用户的语言环境国家的名称。 如果可能,返回的名称将被本地化为默认语言环境。 例如,如果区域设置为fr_FR且默认区域设置为en_US,则getDisplayCountry()将返回“France”; 如果区域设置为en_US且默认区域设置为fr_FR,则getDisplayCountry()将返回“Etats-Unis”。 如果返回的名称不能在默认语言环境中进行本地化(例如,我们没有克罗地亚语的日语名称),则此功能将返回英文名称,并将ISO代码作为最后的度假值。 如果区域设置未指定国家/地区,则此函数返回空字符串。

Returns
String

getDisplayLanguage

Added in API level 1
String getDisplayLanguage (Locale locale)

返回此语言环境的语言名称,本地化为locale 如果语言名称未知,则返回语言代码。

Parameters
locale Locale
Returns
String

getDisplayLanguage

Added in API level 1
String getDisplayLanguage ()

返回适合显示给用户的语言环境语言的名称。 如果可能,返回的名称将被本地化为默认语言环境。 例如,如果区域设置为fr_FR且默认区域设置为en_US,则getDisplayLanguage()将返回“French”; 如果区域设置为en_US且默认区域设置为fr_FR,则getDisplayLanguage()将返回“anglais”。 如果返回的名称不能用于默认语言环境(例如,我们没有克罗地亚语的日语名称),则此函数将回退英文名称,并使用ISO代码作为最后的度假值。 如果区域设置未指定语言,则此函数返回空字符串。

Returns
String

getDisplayName

Added in API level 1
String getDisplayName ()

返回适合显示给用户的语言环境的名称。 这将是由getDisplayLanguage(),getDisplayScript(),getDisplayCountry()和getDisplayVariant()组合成单个字符串所返回的值。 非空值按顺序使用,第二个和后续名称用括号括起来。 例如:

language (script, country, variant)
language (country)
language (variant)
script (country)
country
depending on which fields are specified in the locale. If the language, sacript, country, and variant fields are all empty, this function returns the empty string.

Returns
String

getDisplayName

Added in API level 1
String getDisplayName (Locale locale)

返回本地化的语言名称,国家名称和变体,本地化为locale 确切的输出形式取决于该语言环境是否对应于特定语言,脚本,国家和变体。

For example:

  • new Locale("en").getDisplayName(Locale.US) -> English
  • new Locale("en", "US").getDisplayName(Locale.US) -> English (United States)
  • new Locale("en", "US", "POSIX").getDisplayName(Locale.US) -> English (United States,Computer)
  • Locale.fromLanguageTag("zh-Hant-CN").getDisplayName(Locale.US) -> Chinese (Traditional Han,China)
  • new Locale("en").getDisplayName(Locale.FRANCE) -> anglais
  • new Locale("en", "US").getDisplayName(Locale.FRANCE) -> anglais (États-Unis)
  • new Locale("en", "US", "POSIX").getDisplayName(Locale.FRANCE) -> anglais (États-Unis,informatique).

Parameters
locale Locale
Returns
String

getDisplayScript

Added in API level 21
String getDisplayScript ()

返回适合显示给用户的区域设置脚本的名称。 如果可能的话,该名称将针对默认语言环境进行本地化。 如果此语言环境未指定脚本代码,则返回空字符串。

Returns
String the display name of the script code for the current default locale

getDisplayScript

Added in API level 21
String getDisplayScript (Locale locale)

返回此语言环境的脚本代码的名称,本地化为Locale 如果脚本代码未知,则此方法的返回值与getScript()相同。

Parameters
locale Locale
Returns
String

getDisplayVariant

Added in API level 1
String getDisplayVariant (Locale locale)

返回指定的全异名Locale本的变种代码Locale 如果没有匹配的变体名称,则返回变体代码。

Parameters
locale Locale
Returns
String

getDisplayVariant

Added in API level 1
String getDisplayVariant ()

返回适合向用户显示的区域设置的变体代码的名称。 如果可能的话,该名称将针对默认语言环境进行本地化。 如果区域设置未指定变体代码,则此函数返回空字符串。

Returns
String

getExtension

Added in API level 21
String getExtension (char key)

返回与指定键关联的扩展名(或私有用途)值,如果没有与键关联的扩展名,则返回null。 要形成良好的关键必须是[0-9A-Za-z] 密钥不区分大小写,例如'z'和'Z'代表相同的扩展名。

Parameters
key char: the extension key
Returns
String The extension, or null if this locale defines no extension for the specified key.
Throws
IllegalArgumentException if key is not well-formed

也可以看看:

getExtensionKeys

Added in API level 21
Set<Character> getExtensionKeys ()

返回与此语言环境相关联的扩展键集合,如果没有扩展名,则返回空集合。 返回的集合是不可修改的。 钥匙都是小写的。

Returns
Set<Character> The set of extension keys, or the empty set if this locale has no extensions.

getISO3Country

Added in API level 1
String getISO3Country ()

返回此语言环境国家的三字母缩写。 如果国家符合ISO 3166-1 alpha-2代码,则返回相应的ISO 3166-1 alpha-3大写代码。 如果语言环境未指定国家/地区,则这将是空字符串。

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

Returns
String A three-letter abbreviation of this locale's country.
Throws
MissingResourceException Throws MissingResourceException if the three-letter country abbreviation is not available for this locale.

getISO3Language

Added in API level 1
String getISO3Language ()

返回此语言环境语言的三字母缩写。 如果语言符合ISO 639-1两字母代码,则返回相应的ISO 639-2 / T三字母小写代码。 ISO 639-2语言代码可在线找到,请参阅“语言名称表示法代码第2部分:Alpha-3代码”。 如果语言环境指定了三字母语言,则语言按原样返回。 如果语言环境未指定语言,则返回空字符串。

Returns
String A three-letter abbreviation of this locale's language.
Throws
MissingResourceException Throws MissingResourceException if three-letter language abbreviation is not available for this locale.

getISOCountries

Added in API level 1
String[] getISOCountries ()

返回ISO 3166中定义的所有双字母国家代码的列表。可用于创建区域设置。

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

Returns
String[]

getISOLanguages

Added in API level 1
String[] getISOLanguages ()

返回ISO 639中定义的所有双字母语言代码的列表。可用于创建区域设置。

注意:

  • ISO 639 is not a stable standard— some languages' codes have changed. The list this function returns includes both the new and the old codes for the languages whose codes have changed.
  • The Locale class also supports language codes up to 8 characters in length. Therefore, the list returned by this method does not contain ALL valid codes that can be used to create Locales.

Returns
String[]

getLanguage

Added in API level 1
String getLanguage ()

返回此Locale的语言代码。

注意: ISO 639不是一个稳定的标准 - 某些语言的代码已经改变。 语言环境的构造函数识别代码已更改的语言的新代码和旧代码,但此函数始终返回旧代码。 如果您想检查代码已更改的特定语言,请不要这样做

 if (locale.getLanguage().equals("he")) // BAD!
    ...
 
Instead, do
 if (locale.getLanguage().equals(new Locale("he").getLanguage()))
    ...
 

Returns
String The language code, or the empty string if none is defined.

也可以看看:

getScript

Added in API level 21
String getScript ()

返回此语言环境的脚本,它应该是空字符串或ISO 15924 4字母脚本代码。 第一个字母是大写字母,其余的都是小写字母,例如'Latn','Cyrl'。

Returns
String The script code, or the empty string if none is defined.

也可以看看:

getUnicodeLocaleAttributes

Added in API level 21
Set<String> getUnicodeLocaleAttributes ()

返回与此语言环境相关联的unicode语言环境属性集合,如果没有属性,则返回空集合。 返回的集合是不可修改的。

Returns
Set<String> The set of attributes.

getUnicodeLocaleKeys

Added in API level 21
Set<String> getUnicodeLocaleKeys ()

返回由此语言环境定义的Unicode区域设置键集合,如果此语言环境没有,则返回空集合。 返回的集合是不可变的。 键都是小写字母。

Returns
Set<String> The set of Unicode locale keys, or the empty set if this locale has no Unicode locale keywords.

getUnicodeLocaleType

Added in API level 21
String getUnicodeLocaleType (String key)

返回与此语言环境的指定Unicode区域设置键相关联的Unicode区域设置类型。 返回没有类型定义的键的空字符串。 如果未定义键,则返回null。 密钥不区分大小写。 密钥必须是两个字母数字字符([0-9a-zA-Z]),否则会引发IllegalArgumentException。

Parameters
key String: the Unicode locale key
Returns
String The Unicode locale type associated with the key, or null if the locale does not define the key.
Throws
IllegalArgumentException if the key is not well-formed
NullPointerException if key is null

getVariant

Added in API level 1
String getVariant ()

返回此语言环境的变体代码。

Returns
String The variant code, or the empty string if none is defined.

也可以看看:

hashCode

Added in API level 1
int hashCode ()

覆盖hashCode。 由于经常在散列表中使用区域设置,因此缓存速度值。

Returns
int a hash code value for this object.

setDefault

Added in API level 1
void setDefault (Locale newLocale)

设置此Java虚拟机实例的默认语言环境。 这不会影响主机区域设置。

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

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

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

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

Parameters
newLocale Locale: the new default locale
Throws
SecurityException if a security manager exists and its checkPermission method doesn't allow the operation.
NullPointerException if newLocale is null

也可以看看:

setDefault

Added in API level 24
void setDefault (Locale.Category category, 
                Locale newLocale)

为Java虚拟机的此实例设置指定类别的默认语言环境。 这不会影响主机区域设置。

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

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

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

Parameters
category Locale.Category: - the specified category to set the default locale
newLocale Locale: - the new default locale
Throws
SecurityException - if a security manager exists and its checkPermission method doesn't allow the operation.
NullPointerException - if category and/or newLocale is null

也可以看看:

toLanguageTag

Added in API level 21
String toLanguageTag ()

返回表示此语言环境的格式良好的IETF BCP 47语言标记。

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

语言:如果语言为空,或不是 well-formed (例如“a”或“e2”),它将以“und”(未确定)排出。

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

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

  • if all sub-segments match [0-9a-zA-Z]{1,8} (for example "WIN" or "Oracle_JDK_Standard_Edition"), the first ill-formed sub-segment and all following will be appended to the private use subtag. The first appended subtag will be "lvariant", followed by the sub-segments in order, separated by hyphen. For example, "x-lvariant-WIN", "Oracle-x-lvariant-JDK-Standard-Edition".
  • if any sub-segment does not match [0-9a-zA-Z]{1,8}, the variant will be truncated and the problematic sub-segment and all following sub-segments will be omitted. If the remainder is non-empty, it will be emitted as a private use subtag as above (even if the remainder turns out to be well-formed). For example, "Solaris_isjustthecoolestthing" is emitted as "x-lvariant-Solaris", not as "solaris".

特殊转换:为了兼容性,Java支持一些旧的区域表示,包括不赞成使用的ISO语言代码。 此方法执行以下转换:

  • Deprecated ISO language codes "iw", "ji", and "in" are converted to "he", "yi", and "id", respectively.
  • A locale with language "no", country "NO", and variant "NY", representing Norwegian Nynorsk (Norway), is converted to a language tag "nn-NO".

注意:尽管此方法创建的语言标记格式良好(满足IETF BCP 47规范定义的语法要求),但它不一定是有效的BCP 47语言标记。 例如,

   new Locale("xx", "YY").toLanguageTag();
will return "xx-YY", but the language subtag "xx" and the region subtag "YY" are invalid because they are not registered in the IANA Language Subtag Registry.

Returns
String a BCP47 language tag representing the locale

也可以看看:

toString

Added in API level 1
String toString ()

返回此 Locale对象的字符串表示形式,包括语言,国家,变体,脚本和扩展名,如下所示:

language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions
Language is always lower case, country is always upper case, script is always title case, and extensions are always lower case. Extensions and private use subtags will be in canonical order as explained in toLanguageTag().

当语言环境既没有脚本也没有扩展时,结果与Java 6及之前的版本相同。

如果缺少语言和国家/地区字段,即使存在变体,脚本或扩展字段(该字段不能包含只有变体的区域设置,该变体必须伴随着一个知名的字符)形成的语言或国家代码)。

如果脚本或扩展名存在且变体丢失,则在“#”之前不加下划线。

此行为旨在支持调试,并与toString预期语言,国家和变体字段的以前使用的toString兼容。 要将交换目的的语言环境表示为字符串,请使用toLanguageTag()

Examples:

  • en
  • de_DE
  • _GB
  • en_US_WIN
  • de__POSIX
  • zh_CN_#Hans
  • zh_TW_#Hant-x-java
  • th_TH_TH_#u-nu-thai

Returns
String A string representation of the Locale, for debugging.

也可以看看:

Hooray!