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
对象逻辑上由下面描述的字段组成。
Locale
always canonicalizes to lower case.
[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.
Locale
always canonicalizes to title case (the first letter is upper case and the rest of the letters are lower case).
[a-zA-Z]{4}
Locale
always canonicalizes to upper case.
[a-zA-Z]{2} | [0-9]{3}
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.
然而, Locale
的变体字段历来被用于任何类型的变体,而不仅仅是语言变体。 例如,Java SE运行时环境中可用的一些受支持的变体指示替代文化行为,例如日历类型或编号脚本。 在BCP 47中,这种不标识语言的信息由扩展子标签或私人使用子标签支持。
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).
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.
[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).
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.
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区域设置属性或键/类型对。
有几种不同的方法来创建一个 Locale
对象。
使用 Locale.Builder
您可以构建符合BCP 47语法的 Locale
对象。
Locale
类提供了三个构造函数:
These constructors allow you to create aLocale(String)
Locale(String, String)
Locale(String, String, String)
Locale
object with language, country and variant, but you cannot specify script or extensions.
方法 forLanguageTag(String)
为 Locale
良好的BCP 47语言标记创建 Locale
对象。
Locale
类提供了许多方便的常量,可用于为常用语言环境创建Locale
对象。 例如,以下内容将为美国创建一个Locale
对象:
Locale.US
一旦你创建了一个Locale
你可以查询它以获取关于它自己的信息。 使用getCountry
获取国家(或地区)代码,并使用getLanguage
获取语言代码。 您可以使用getDisplayCountry
来获取适合向用户显示的国家/地区的名称。 同样,您可以使用getDisplayLanguage
来获取适合向用户显示的语言的名称。 有趣的是, getDisplayXXX
方法本身是区域敏感的,并有两个版本:一个使用默认语言环境,另一个使用指定的语言环境作为参数。
Java平台提供了许多执行区域敏感操作的类。 例如, NumberFormat
类以地区敏感的方式格式化数字,货币和百分比。 类如NumberFormat
有几种便捷方法来创建该类型的默认对象。 例如, NumberFormat
类提供了三种便捷方法来创建默认的NumberFormat
对象:
Each of these methods has two variants; one with an explicit locale and one without; the latter uses the default locale:NumberFormat.getInstance() NumberFormat.getCurrencyInstance() NumberFormat.getPercentInstance()
ANumberFormat.getInstance(myLocale) NumberFormat.getCurrencyInstance(myLocale) NumberFormat.getPercentInstance(myLocale)
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.
为了保持与现有用法的兼容性,Locale的构造函数在Java运行时环境1.7版之前保留其行为。 toString
方法基本上也是如此。 因此Locale对象可以继续按照原样使用。 特别是,将toString的输出解析为语言,国家和变体字段的客户可以继续这样做(尽管强烈建议不要这样做),但如果脚本或扩展名存在,variant字段将包含附加信息。
另外,BCP 47强加的语法限制不是由Locale的构造函数施加的。 这意味着某些Locales和BCP 47语言标签之间的转换不能在不丢失信息的情况下进行。 因此toLanguageTag
不能表示其语言,国家或变体不符合BCP 47的语言环境的状态。
由于这些问题,建议客户从构建不符合的区域设置迁移出来,并Locale.Builder
使用forLanguageTag
和Locale.Builder
API。 希望完整语言环境的字符串表示的客户可以始终依靠toLanguageTag
达到此目的。
出于兼容性原因,两个不合格的语言环境被视为特殊情况。 这些是ja_JP_JP和th_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”。
在序列化期间,writeObject将所有字段写入输出流,包括扩展。
在反序列化期间,readResolve会像 Special Cases中所述的 那样添加扩展,仅针对th_TH_TH和ja_JP_JP这两种情况。
语言环境的构造一直变换的三个语言代码到其以前的,过时的形式:he名映射到iw,yi名映射到ji,并id名映射到in。 这仍然是这种情况,为了不破坏向后兼容性。
1.7中添加的API在新旧语言代码之间映射,将旧代码保留在Locale内部(以便getLanguage
和toString
反映旧代码),但在BCP 47语言标记API中使用新代码(以便toLanguageTag
反映新的那一个)。 无论使用哪种代码或API构建它们,都可以保持Locale之间的等价性。 Java的默认资源包查找机制也实现了这种映射,因此可以使用任何约定来命名资源,请参阅ResourceBundle.Control
。
Locale构造函数一直指定语言和国家参数的长度为两个字符,尽管在实践中它们已经接受了任何长度。 现在已经放宽了规范,允许2到8个字符的语言代码和2到3个字符的国家(地区)代码,尤其是IANA语言子标签注册中心规定的三字母语言代码和三位数地区代码。 为了兼容性,实现仍然没有施加长度约束。
请注意,本地数据仅来自ICU。 用户提供的区域设置服务提供程序(使用java.text.spi
或java.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 |
请注意,有许多便利方法会自动使用默认语言环境,但使用它们可能会导致微妙的错误。
默认语言环境适用于涉及向用户呈现数据的任务。 在这种情况下,您想要使用用户的日期/时间格式,数字格式,转换为小写字母的规则等等。 在这种情况下,使用便利方法是安全的。
默认语言环境不适用于机器可读输出。 最好的选择通常是Locale.US
这种语言环境保证在所有设备上都可用,并且它没有令人意外的特殊情况并且经常使用(特别是用于计算机 - 计算机通信)的事实意味着它倾向于最有效的选择。
一个常见的错误是在生成意味着机器可读的输出时隐式使用缺省语言环境。 这往往适用于开发人员的测试设备(特别是因为许多开发人员使用en_US),但在用户处于更复杂的区域设置的设备上运行时会失败。
例如,如果您正在格式化整数,某些语言环境将使用非ASCII十进制数字。 作为另一个例子,如果你正在格式化浮点数,一些locale将使用','
作为小数点, '.'
作为数字分组。 这对于人类可读的输出是正确的,但是如果提交给另一台计算机可能会导致问题(例如, parseDouble(String)
无法解析这样的数字)。 你也应该警惕的toLowerCase()
个toUpperCase()
重载不带走一片Locale
:在土耳其,例如,人物'i'
和'I'
不会被转换为'I'
和'i'
。 这是土耳其文本的正确行为(如用户输入),但不适用于HTTP标头。
Nested classes |
|
---|---|
class |
Locale.Builder |
枚举 |
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) 返回此语言环境国家的名称,本地化为 |
final String |
getDisplayCountry() 返回适合显示给用户的语言环境国家的名称。 |
String |
getDisplayLanguage(Locale locale) 返回本地语言的名称,本地化为 |
final String |
getDisplayLanguage() 返回适合显示给用户的语言环境语言的名称。 |
final String |
getDisplayName() 返回适合显示给用户的语言环境的名称。 |
String |
getDisplayName(Locale locale) 返回本地化的语言名称,国家名称和变体,本地化为 |
String |
getDisplayScript() 返回适合显示给用户的区域设置脚本的名称。 |
String |
getDisplayScript(Locale locale) 返回此语言环境的脚本代码的名称,本地化为 |
String |
getDisplayVariant(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() 返回此 language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensionsLanguage 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
|
char PRIVATE_USE_EXTENSION
私人用途扩展的关键('x')。
常量值:120(0x00000078)
char UNICODE_LOCALE_EXTENSION
Unicode区域扩展的关键('u')。
常量值:117(0x00000075)
Locale ROOT
根区域设置的有用常量。 根区域设置是其语言,国家和变体为空(“”)字符串的区域设置。 这被认为是所有语言环境的基本语言环境,并被用作区域敏感操作的语言/国家中性语言环境。
Locale (String language, String country, String variant)
从语言,国家和变体构建语言环境。 此构造函数将语言值标准化为小写,将国家/地区值标准化为大写。
注意:
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 (String language, String country)
从语言和国家构建语言环境。 此构造函数将语言值标准化为小写,将国家/地区值标准化为大写。
注意:
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 (String language)
从语言代码构建语言环境。 此构造函数将语言值标准化为小写。
Note:
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. |
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. |
Locale forLanguageTag (String languageTag)
返回指定的IETF BCP 47语言标记字符串的语言环境。
如果指定的语言标签包含任何不合格的子标签,则会忽略第一个此类子标签和所有后续子标签。 与在此情况下引发异常的setLanguageTag(String)
进行比较。
执行以下 转换 :
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"
Locale.forLanguageTag("ar-aao").getLanguage(); // returns "aao" Locale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
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语言标签注册表(搜索“类型:祖父”)。
注意 :不能保证 toLanguageTag
和 forLanguageTag
会往返。
Parameters | |
---|---|
languageTag |
String : the language tag |
Returns | |
---|---|
Locale |
The locale that best represents the language tag. |
Throws | |
---|---|
NullPointerException |
if languageTag is null |
Locale[] getAvailableLocales ()
返回所有已安装语言环境的数组。 返回的数组表示Java运行时环境支持的语言环境的联合以及安装的LocaleServiceProvider
实现。 它必须包含至少一个等于Locale.US
的Locale
实例。
Returns | |
---|---|
Locale[] |
An array of installed locales. |
String getCountry ()
返回此语言环境的国家/地区代码,该代码应该是空字符串,大写ISO 3166 2字母代码或UN M.49 3位代码。
Returns | |
---|---|
String |
The country/region code, or the empty string if none is defined. |
也可以看看:
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 |
Locale getDefault ()
获取此Java虚拟机实例的默认语言环境的当前值。
Java虚拟机根据主机环境设置启动期间的默认区域设置。 如果没有明确指定区域设置,它会被许多区域敏感的方法使用。 可以使用setDefault
方法更改它。
Returns | |
---|---|
Locale |
the default locale for this instance of the Java Virtual Machine |
String getDisplayCountry (Locale locale)
返回此语言环境国家的名称,本地化为locale
。 如果此语言环境不符合特定国家/地区,则返回空字符串。
Parameters | |
---|---|
locale |
Locale
|
Returns | |
---|---|
String |
String getDisplayCountry ()
返回适合显示给用户的语言环境国家的名称。 如果可能,返回的名称将被本地化为默认语言环境。 例如,如果区域设置为fr_FR且默认区域设置为en_US,则getDisplayCountry()将返回“France”; 如果区域设置为en_US且默认区域设置为fr_FR,则getDisplayCountry()将返回“Etats-Unis”。 如果返回的名称不能在默认语言环境中进行本地化(例如,我们没有克罗地亚语的日语名称),则此功能将返回英文名称,并将ISO代码作为最后的度假值。 如果区域设置未指定国家/地区,则此函数返回空字符串。
Returns | |
---|---|
String |
String getDisplayLanguage (Locale locale)
返回此语言环境的语言名称,本地化为locale
。 如果语言名称未知,则返回语言代码。
Parameters | |
---|---|
locale |
Locale
|
Returns | |
---|---|
String |
String getDisplayLanguage ()
返回适合显示给用户的语言环境语言的名称。 如果可能,返回的名称将被本地化为默认语言环境。 例如,如果区域设置为fr_FR且默认区域设置为en_US,则getDisplayLanguage()将返回“French”; 如果区域设置为en_US且默认区域设置为fr_FR,则getDisplayLanguage()将返回“anglais”。 如果返回的名称不能用于默认语言环境(例如,我们没有克罗地亚语的日语名称),则此函数将回退英文名称,并使用ISO代码作为最后的度假值。 如果区域设置未指定语言,则此函数返回空字符串。
Returns | |
---|---|
String |
String getDisplayName ()
返回适合显示给用户的语言环境的名称。 这将是由getDisplayLanguage(),getDisplayScript(),getDisplayCountry()和getDisplayVariant()组合成单个字符串所返回的值。 非空值按顺序使用,第二个和后续名称用括号括起来。 例如:
language (script, country, variant)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.
language (country)
language (variant)
script (country)
country
Returns | |
---|---|
String |
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 |
String getDisplayScript ()
返回适合显示给用户的区域设置脚本的名称。 如果可能的话,该名称将针对默认语言环境进行本地化。 如果此语言环境未指定脚本代码,则返回空字符串。
Returns | |
---|---|
String |
the display name of the script code for the current default locale |
String getDisplayScript (Locale locale)
返回此语言环境的脚本代码的名称,本地化为Locale
。 如果脚本代码未知,则此方法的返回值与getScript()
相同。
Parameters | |
---|---|
locale |
Locale
|
Returns | |
---|---|
String |
String getDisplayVariant (Locale locale)
返回指定的全异名Locale
本的变种代码Locale
。 如果没有匹配的变体名称,则返回变体代码。
Parameters | |
---|---|
locale |
Locale
|
Returns | |
---|---|
String |
String getDisplayVariant ()
返回适合向用户显示的区域设置的变体代码的名称。 如果可能的话,该名称将针对默认语言环境进行本地化。 如果区域设置未指定变体代码,则此函数返回空字符串。
Returns | |
---|---|
String |
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 |
Set<Character> getExtensionKeys ()
返回与此语言环境相关联的扩展键集合,如果没有扩展名,则返回空集合。 返回的集合是不可修改的。 钥匙都是小写的。
Returns | |
---|---|
Set<Character> |
The set of extension keys, or the empty set if this locale has no extensions. |
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. |
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. |
String[] getISOCountries ()
返回ISO 3166中定义的所有双字母国家代码的列表。可用于创建区域设置。
注意: Locale
类还支持国家(地区)的其他代码,例如3个字母的数字UN M.49区号。 因此,此方法返回的列表不包含可用于创建区域设置的所有有效代码。
Returns | |
---|---|
String[] |
String[] getISOLanguages ()
返回ISO 639中定义的所有双字母语言代码的列表。可用于创建区域设置。
注意:
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[] |
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. |
也可以看看:
String getScript ()
返回此语言环境的脚本,它应该是空字符串或ISO 15924 4字母脚本代码。 第一个字母是大写字母,其余的都是小写字母,例如'Latn','Cyrl'。
Returns | |
---|---|
String |
The script code, or the empty string if none is defined. |
也可以看看:
Set<String> getUnicodeLocaleAttributes ()
返回与此语言环境相关联的unicode语言环境属性集合,如果没有属性,则返回空集合。 返回的集合是不可修改的。
Returns | |
---|---|
Set<String> |
The set of attributes. |
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. |
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 |
String getVariant ()
返回此语言环境的变体代码。
Returns | |
---|---|
String |
The variant code, or the empty string if none is defined. |
也可以看看:
int hashCode ()
覆盖hashCode。 由于经常在散列表中使用区域设置,因此缓存速度值。
Returns | |
---|---|
int |
a hash code value for this object. |
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 |
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 |
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}
(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". [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语言代码。 此方法执行以下转换:
注意:尽管此方法创建的语言标记格式良好(满足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 |
也可以看看:
String toString ()
返回此 Locale
对象的字符串表示形式,包括语言,国家,变体,脚本和扩展名,如下所示:
language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensionsLanguage 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:
Returns | |
---|---|
String |
A string representation of the Locale, for debugging. |
也可以看看: