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
对象逻辑上由以下描述的字段组成。
Locale
总是规范化为小写。
[a-zA-Z]{2,8}
语言值有[a-zA-Z]{2,8}
的格式。
请注意,这不是完整的BCP47语言生产,因为它不包括extlang。
它们不需要,因为现代的三字母语言代码替代它们。
Locale
总是规范化到标题大小写(第一个字母大写,其余的字母小写)。
[a-zA-Z]{4}
脚本值的格式为[a-zA-Z]{4}
Locale
总是canonicalizes为大写。
[a-zA-Z]{2} | [0-9]{3}
Locale
。
在有两个或多个变体值的情况下,每个值都表示自己的语义,这些值应按重要性排序,最重要的是首先用下划线('_')分隔。
变体字段区分大小写。
然而, Locale
中的变体字段历来被用于任何种类的变化,而不仅仅是语言变化。 例如,Java SE运行时环境中可用的一些支持的变体表示替代的文化行为,如日历类型或数字脚本。 在BCP 47中,这种不能识别语言的信息受到扩展子标签或私有使用子标签的支持。
SUBTAG (('_'|'-') SUBTAG)*
变体值的格式为SUBTAG (('_'|'-') SUBTAG)*
,其中SUBTAG = [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}
。
(注意:BCP 47只使用连字符(' - ')作为分隔符,这个更宽松)。
Locale
实现了BCP 47扩展子标签和私有使用子标签的语义和语法。
扩展名不区分大小写,但Locale
将所有扩展键和值规范化为小写。
请注意,扩展名不能有空值。
[0-9a-zA-Z]
。
格式SUBTAG ('-' SUBTAG)*
值具有SUBTAG ('-' SUBTAG)*
的格式,对于“x” SUBTAG = [0-9a-zA-Z]{1,8}
和其他键SUBTAG = [0-9a-zA-Z]{2,8}
(即,“x”允许单字符子标签)。
Locale
类不提供任何验证功能。
Builder
仅检查个别字段是否满足语法要求(格式良好),但不会验证值本身。
详见Locale.Builder
。
UTS#35,“Unicode语言环境数据标记语言”定义了可选属性和关键字来覆盖或改进与语言环境相关联的默认行为。 关键字由一对键和类型表示。 例如,“nu-thai”表示泰国本地数字(值:“thai”)应用于格式化数字(键:“nu”)。
关键字使用扩展键“u”映射到BCP 47扩展值( UNICODE_LOCALE_EXTENSION
)。 上面的例子“nu-thai”成为扩展“u-nu-thai”.code
因此,当一个Locale
对象包含Unicode区域设置属性和关键字时, getExtension(UNICODE_LOCALE_EXTENSION)
将返回一个表示此信息的字符串,例如“nu-thai”。 该Locale
类还提供getUnicodeLocaleAttributes()
, getUnicodeLocaleKeys()
和getUnicodeLocaleType(java.lang.String)
,让你可以直接访问Unicode语言环境属性和关键/类型对。 当以字符串的形式表示时,Unicode区域设置扩展名按字母顺序列出属性,后面是按字母顺序列出的按键/类型序列(包含键的类型的子标记的顺序在定义类型时是固定的)
格式良好的区域密钥的格式为[0-9a-zA-Z]{2}
。 格式良好的区域设置类型为"" | [0-9a-zA-Z]{3,8} ('-' [0-9a-zA-Z]{3,8})*
(可以是空的,或者一系列长度为3-8的子标题)。 格式良好的区域设置属性的格式为[0-9a-zA-Z]{3,8}
(它是一种与区域设置类型子标签相同形式的子标签)。
Unicode区域设置扩展名指定区域设置敏感服务中的可选行为。 虽然LDML规范定义了各种键和值,Java运行时环境中的实际区域设置敏感的服务实现可能不支持任何特定的Unicode区域设置属性或键/类型对。
有几种不同的方式来创建一个Locale
对象。
使用Locale.Builder
可以构造符合BCP 47语法的Locale
对象。
Locale
类提供三个构造函数:
这些构造函数允许您使用语言,国家和变体创建一个Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)
Locale
对象,但不能指定脚本或扩展名。
方法forLanguageTag(java.lang.String)
为形成良好的BCP 47语言标签创建一个Locale
对象。
Locale
类提供了一些方便的常量,您可以使用它来为常用的区域设置创建Locale
对象。 例如,以下内容为美国创建一个Locale
对象:
Locale.US
如果应用程序或系统被国际化并为多个区域设置提供本地化资源,则有时需要找到满足每个用户的特定偏好的一个或多个区域设置(或语言标签)。 请注意,术语“语言标签”可与本地区匹配文档中的“区域设置”互换使用。
为了将用户的首选语言环境与一组语言标签进行匹配, 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 Platform提供了许多执行区域设置敏感操作的类。 例如, NumberFormat
类以区域设置敏感的方式格式化数字,货币和百分比。 诸如NumberFormat
类具有几种创建该类型的默认对象的便利方法。 例如, NumberFormat
类为创建默认的NumberFormat
对象提供了这三种方便的方法:
这些方法中的每一种都有两种变体; 一个有明确的语言环境,一个没有; 后者使用默认的NumberFormat.getInstance() NumberFormat.getCurrencyInstance() NumberFormat.getPercentInstance()
FORMAT
语言环境:
ANumberFormat.getInstance(myLocale) NumberFormat.getCurrencyInstance(myLocale) NumberFormat.getPercentInstance(myLocale)
Locale
是识别您想要获得的对象种类( NumberFormat
)的机制。
区域设置只是用于识别对象的机制, 而不是对象本身的容器。
为了保持与现有使用的兼容性,Locale的构造函数在Java Runtime Environment 1.7之前保留其行为。 对于toString
方法也是如此。 因此,区域设置对象可以继续使用。 特别是,将toString的输出解析为语言,国家和变体字段的客户端可以继续这样做(尽管这是非常不鼓励的),尽管如果存在脚本或扩展名,变体字段将具有其他信息。
此外,BCP 47强加了Locale的构造函数不强加的语法限制。 这意味着在不丢失信息的情况下,无法进行某些区域设置和BCP 47语言标记之间的转换。 因此, toLanguageTag
不能代表其语言,国家或变体不符合BCP 47的语言环境的状态。
由于这些问题,建议客户端迁移构建不合格的区域设置,并改用forLanguageTag
和Locale.Builder
API。 那么想要一个字符串表示的完整语言环境的客户可以随时为此而使用toLanguageTag
。
出于兼容性原因,两个不合格的区域设置被视为特殊情况。 这些是ja_JP_JP和th_TH_TH 。 这些都是在BCP 47中形成的,因为变体太短。 为了缓解迁移到BCP 47,这些在施工期间被特别处理。 这两种情况(只有这些)导致构造函数生成扩展,所有其他值的行为与Java 7之前的行为完全相同。
Java已经使用ja_JP_JP代表日本在日本与日本帝国日历一起使用。 现在可以通过使用Unicode区域设置扩展名来指定Unicode区域设置密钥ca (对于“日历”)和类型japanese可以表示 。 当使用参数“ja”,“JP”,“JP”调用Locale构造函数时,将自动添加扩展名“u-ca-japanese”。
Java使用th_TH_TH代表泰国与泰国一起使用泰国数字。 现在也可以通过使用Unicode区域设置扩展名来指定Unicode区域设置密钥nu (“号”)和值thai 。 当使用参数“th”,“TH”,“TH”调用Locale构造函数时,会自动添加扩展名“u-nu-thai”。
在序列化期间,writeObject将所有字段写入输出流,包括扩展。
在反序列化,如在的readResolve增加了扩展Special Cases仅两种情况th_TH_TH和ja_JP_JP。
语言环境的构造一直变换的三个语言代码到其以前的,过时的形式:he名映射到iw,yi名映射到ji,并id名映射到in。 这种情况依然如此,为了不破坏兼容性。
这些API在新版本的语言代码之间以1.7的形式添加了API,将旧版代码保留在Locale内部(以便getLanguage
和toString
反映旧代码),但是使用BCP 47语言标签API中的新代码(以便toLanguageTag
反映新的那一个)。 无论使用哪个代码或API来构造它们,都可以保持区域设置之间的等价性。 Java的默认资源包查找机制也实现了这种映射,因此可以使用任何一种约定命名资源,请参阅ResourceBundle.Control
。
Locale构造函数一直指定语言和国家参数长度为两个字符,但实际上它们已经接受了任何长度。 该规范现已放宽,允许2至8个字符的语言代码和2到3个字符的国家(地区)代码,特别是IANA语言分条注册表中指定的三个字母的语言代码和三位数区域代码。 为了兼容性,实现仍然不会强加长度约束。
Locale.Builder
, ResourceBundle
, Format
, NumberFormat
, Collator
, Serialized Form
Modifier and Type | Class and Description |
---|---|
static class |
Locale.Builder
Builder 用于从由setter
Locale 的值构建Locale的
Locale 。
|
static class |
Locale.Category
枚举地区类别。
|
static class |
Locale.FilteringMode
此枚举提供常量来选择区域设置匹配的过滤模式。
|
static class |
Locale.LanguageRange
该类表示在
RFC 4647 Matching of Language Tags中定义的
语言范围 。
|
Modifier and Type | Field and Description |
---|---|
static Locale |
CANADA
对国家有用的常数。
|
static Locale |
CANADA_FRENCH
对国家有用的常数。
|
static Locale |
CHINA
对国家有用的常数。
|
static Locale |
CHINESE
有用的语言常数
|
static Locale |
ENGLISH
有用的语言常数
|
static Locale |
FRANCE
对国家有用的常数。
|
static Locale |
FRENCH
有用的语言常数
|
static Locale |
GERMAN
有用的语言常数
|
static Locale |
GERMANY
对国家有用的常数。
|
static Locale |
ITALIAN
有用的语言常数
|
static Locale |
ITALY
对国家有用的常数。
|
static Locale |
JAPAN
对国家有用的常数。
|
static Locale |
JAPANESE
有用的语言常数
|
static Locale |
KOREA
对国家有用的常数。
|
static Locale |
KOREAN
有用的语言常数
|
static Locale |
PRC
对国家有用的常数。
|
static char |
PRIVATE_USE_EXTENSION
私人使用扩展('x')的关键。
|
static Locale |
ROOT
根区域的常用常数。
|
static Locale |
SIMPLIFIED_CHINESE
有用的语言常数
|
static Locale |
TAIWAN
对国家有用的常数。
|
static Locale |
TRADITIONAL_CHINESE
有用的语言常数
|
static Locale |
UK
对国家有用的常数。
|
static char |
UNICODE_LOCALE_EXTENSION
Unicode区域扩展('u')的关键。
|
static Locale |
US
对国家有用的常数。
|
Constructor and Description |
---|
Locale(String language)
从语言代码构建语言环境。
|
Locale(String language, String country)
从语言和国家构建语言环境。
|
Locale(String language, String country, String variant)
从语言,国家和变体构建语言环境。
|
Modifier and Type | Method and Description |
---|---|
Object |
clone()
覆盖可克隆。
|
boolean |
equals(Object obj)
如果此区域设置等于另一个对象,则返回true。
|
static List<Locale> |
filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
使用RFC 4647中定义的过滤机制返回匹配的
Locale 实例的列表。
|
static List<Locale> |
filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales, Locale.FilteringMode mode)
使用RFC 4647中定义的过滤机制返回匹配的
Locale 实例的列表。
|
static List<String> |
filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags)
使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。
|
static List<String> |
filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags, Locale.FilteringMode mode)
使用RFC 4647中定义的基本过滤机制返回匹配语言标签的列表。
|
static Locale |
forLanguageTag(String languageTag)
返回指定的IETF BCP 47语言标记字符串的语言环境。
|
static Locale[] |
getAvailableLocales()
返回所有已安装区域设置的数组。
|
String |
getCountry()
返回此区域设置的国家/地区代码,该代码应为空字符串,大写ISO 3166 2字母代码或UN M.49 3位代码。
|
static Locale |
getDefault()
获取Java虚拟机的此实例的默认语言环境的当前值。
|
static Locale |
getDefault(Locale.Category category)
获取Java虚拟机的此实例的指定类别的默认语言环境的当前值。
|
String |
getDisplayCountry()
返回适合显示给用户的区域设置国家/地区的名称。
|
String |
getDisplayCountry(Locale inLocale)
返回适合显示给用户的区域设置国家/地区的名称。
|
String |
getDisplayLanguage()
返回适合显示给用户的语言环境语言的名称。
|
String |
getDisplayLanguage(Locale inLocale)
返回适合显示给用户的语言环境语言的名称。
|
String |
getDisplayName()
返回适合显示给用户的区域设置的名称。
|
String |
getDisplayName(Locale inLocale)
返回适合显示给用户的区域设置的名称。
|
String |
getDisplayScript()
返回适合显示给用户的区域设置脚本的名称。
|
String |
getDisplayScript(Locale inLocale)
返回适合显示给用户的区域设置脚本的名称。
|
String |
getDisplayVariant()
返回适合显示给用户的区域设置变体代码的名称。
|
String |
getDisplayVariant(Locale inLocale)
返回适合显示给用户的区域设置变体代码的名称。
|
String |
getExtension(char key)
返回与指定键相关联的扩展名(或私有使用)值,如果没有与密钥关联的扩展名,则返回null。
|
Set<Character> |
getExtensionKeys()
返回与此区域设置关联的一组扩展键,如果没有扩展名则返回空集。
|
String |
getISO3Country()
返回此区域设置的国家/地区的三个字母的缩写。
|
String |
getISO3Language()
返回此语言环境的三个字母缩写。
|
static String[] |
getISOCountries()
返回ISO 3166中定义的所有2个字母的国家/地区代码的列表。
|
static String[] |
getISOLanguages()
返回ISO 639中定义的所有2个字母的语言代码的列表。
|
String |
getLanguage()
返回此区域设置的语言代码。
|
String |
getScript()
返回此语言环境的脚本,该脚本应为空字符串或ISO 15924 4字母脚本代码。
|
Set<String> |
getUnicodeLocaleAttributes()
返回与此区域设置相关联的unicode区域设置属性集,如果没有属性则返回空集合。
|
Set<String> |
getUnicodeLocaleKeys()
返回此区域设置定义的Unicode区域设置键的集合,如果此区域设置没有,则返回空集合。
|
String |
getUnicodeLocaleType(String key)
返回与该区域设置的指定的Unicode区域设置键相关联的Unicode区域设置类型。
|
String |
getVariant()
返回此区域设置的变体代码。
|
boolean |
hasExtensions()
|
int |
hashCode()
覆盖hashCode。
|
static Locale |
lookup(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
使用RFC 4647中定义的查找机制返回最佳匹配语言标签的
Locale 实例。
|
static String |
lookupTag(List<Locale.LanguageRange> priorityList, Collection<String> tags)
使用RFC 4647中定义的查找机制返回最匹配的语言标签。
|
static void |
setDefault(Locale.Category category, Locale newLocale)
为Java虚拟机的此实例设置指定类别的默认语言环境。
|
static void |
setDefault(Locale newLocale)
设置Java虚拟机的此实例的默认语言环境。
|
Locale |
stripExtensions()
返回此
Locale 的副本,没有
extensions 。
|
String |
toLanguageTag()
返回一个格式正确的IETF BCP 47语言标签,代表这个区域。
|
String |
toString()
返回此
Locale 对象的字符串表示形式,由语言,国家/地区,变体,脚本和扩展名组成,如下所示:language +“_”+ country +“_”+(variant +“_#”|“#”)+ script +“ - ”+扩展语言总是小写,国家总是大写,脚本总是标题大小写,扩展总是小写。
|
public static final Locale ENGLISH
public static final Locale FRENCH
public static final Locale GERMAN
public static final Locale ITALIAN
public static final Locale JAPANESE
public static final Locale KOREAN
public static final Locale CHINESE
public static final Locale SIMPLIFIED_CHINESE
public static final Locale TRADITIONAL_CHINESE
public static final Locale FRANCE
public static final Locale GERMANY
public static final Locale ITALY
public static final Locale JAPAN
public static final Locale KOREA
public static final Locale CHINA
public static final Locale PRC
public static final Locale TAIWAN
public static final Locale UK
public static final Locale US
public static final Locale CANADA
public static final Locale CANADA_FRENCH
public static final Locale ROOT
public static final char PRIVATE_USE_EXTENSION
getExtension(char)
,
Locale.Builder.setExtension(char, String)
,
Constant Field Values
public static final char UNICODE_LOCALE_EXTENSION
getExtension(char)
,
Locale.Builder.setExtension(char, String)
,
Constant Field Values
public Locale(String language, String country, String variant)
注意:
language
- ISO 639 alpha-2或alpha-3语言代码或最多8个字符的语言子标签。
请参阅关于有效语言值的Locale
类描述。
country
- ISO 3166 alpha-2国家代码或UN M.49数字-3区号。
请参阅关于有效国家/地区值的Locale
类描述。
variant
- 用于指示Locale变化的Locale
。
有关详细信息,请参阅Locale
类描述。
NullPointerException
- 如果任何参数为空,则抛出。
public Locale(String language, String country)
注意:
language
- ISO 639 alpha-2或alpha-3语言代码,或最多8个字符的语言子标签。
请参阅关于有效语言值的Locale
类描述。
country
- ISO 3166 alpha-2国家代码或UN M.49数字-3区号。
请参阅关于有效国家/地区值的Locale
类描述。
NullPointerException
- 如果任一参数为空,则抛出。
public Locale(String language)
注意:
language
- ISO 639 alpha-2或alpha-3语言代码或最多8个字符的语言子标签。
请参阅关于有效语言值的Locale
类描述。
NullPointerException
- 如果参数为null,则抛出。
public static Locale getDefault()
Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。 可以使用setDefault
方法更改。
public static Locale getDefault(Locale.Category category)
Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。 它可以使用setDefault(Locale.Category,Locale)方法更改。
category
- - 获取默认语言环境的指定类别
NullPointerException
- - 如果类别为空
setDefault(Locale.Category, Locale)
public static void setDefault(Locale newLocale)
如果有安全管理器,则在默认语言环境更改之前,将调用其checkPermission
方法,并使用PropertyPermission("user.language", "write")
权限。
Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。
因为更改默认语言环境可能会影响许多不同的功能区域,所以只有在调用者准备重新初始化同一Java虚拟机中运行的区域设置敏感代码时,才应使用此方法。
通过使用此方法设置默认语言环境,每个类别的所有默认语言环境也将设置为指定的默认语言环境。
newLocale
- 新的默认语言环境
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许操作。
NullPointerException
- 如果
newLocale
为空
SecurityManager.checkPermission(java.security.Permission)
, PropertyPermission
public static void setDefault(Locale.Category category, Locale newLocale)
如果有安全管理器,则在默认语言环境更改之前,将使用PropertyPermission(“user.language”,“write”)权限调用其checkPermission方法。
Java虚拟机根据主机环境在启动期间设置默认语言环境。 如果没有显式指定区域设置,则会被许多区域设置敏感的方法使用。
因为更改默认语言环境可能会影响许多不同的功能区域,所以只有在调用者准备重新初始化同一Java虚拟机中运行的区域设置敏感代码时,才应使用此方法。
category
- - 指定类别设置默认语言环境
newLocale
- - 新的默认语言环境
SecurityException
- 如果安全管理器存在,并且其checkPermission方法不允许操作。
NullPointerException
- - 如果category和/或newLocale为null
SecurityManager.checkPermission(java.security.Permission)
, PropertyPermission
, getDefault(Locale.Category)
public static Locale[] getAvailableLocales()
LocaleServiceProvider
实现。
它必须包含至少Locale
实例等于Locale.US
。
public static String[] getISOCountries()
注意: Locale
类还支持国家(地区)的其他代码,例如3字母数字UN M.49区号。 因此,此方法返回的列表不包含可用于创建区域设置的所有有效代码。
public static String[] getISOLanguages()
注意:
Locale
课程还支持长达8个字符的语言代码。 因此,此方法返回的列表不包含可用于创建区域设置的所有有效代码。 public String getLanguage()
注意: ISO 639不是一个稳定的标准 - 一些语言的代码已经改变。 Locale的构造函数识别代码已更改的语言的新旧代码,但此函数始终返回旧代码。 如果要检查其代码已更改的特定语言,请勿执行
if (locale.getLanguage().equals("he")) // BAD!
...
相反,做
if (locale.getLanguage().equals(new Locale("he").getLanguage()))
...
getDisplayLanguage()
public String getScript()
getDisplayScript()
public String getCountry()
getDisplayCountry()
public String getVariant()
getDisplayVariant()
public boolean hasExtensions()
true
如果这
Locale
有任何扩展
public Locale stripExtensions()
Locale
的副本,没有extensions 。
如果这个Locale
没有扩展,则返回此Locale
。
Locale
的副本,没有扩展名,或
this
如果
this
没有扩展名
public String getExtension(char key)
[0-9A-Za-z]
。
键不区分大小写,因此例如“z”和“Z”表示相同的扩展名。
key
- 扩展键
IllegalArgumentException
- 如果密钥
IllegalArgumentException
不正确
PRIVATE_USE_EXTENSION
,
UNICODE_LOCALE_EXTENSION
public Set<Character> getExtensionKeys()
public Set<String> getUnicodeLocaleAttributes()
public String getUnicodeLocaleType(String key)
key
- Unicode区域设置键
IllegalArgumentException
- 如果密钥
IllegalArgumentException
不正确
NullPointerException
- 如果
key
为空
public Set<String> getUnicodeLocaleKeys()
public final String toString()
Locale
对象的字符串表示形式,由语言,国家/地区,变体,脚本和扩展名组成,如下所示:
language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions语言总是小写,国家总是大写,脚本总是标题,扩展总是小写。 扩展和私有使用子标签将按照
toLanguageTag()
中所述的规范顺序。
当语言环境既没有脚本也没有扩展名,结果与Java 6和之前的相同。
如果语言和国家/地区字段都丢失,则此函数将返回空字符串,即使存在变体,脚本或扩展名字段(您不能只具有变体的语言环境,形成的语言或国家代码)。
如果脚本或扩展名存在且变体丢失,则在“#”之前不会添加下划线。
此行为旨在支持调试,并与以前使用的预期语言,国家/地区和变体字段的toString
。 为了表示一个字符串用于交换目的,请使用toLanguageTag()
。
例子:
toString
在
Object
getDisplayName()
,
toLanguageTag()
public String toLanguageTag()
如果此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语言代码,以实现兼容性。 此方法执行以下转换:
注意:虽然由此方法创建的语言标签格式正确(满足IETF BCP 47规范定义的语法要求),但并不一定是有效的BCP 47语言标记。 例如,
new Locale("xx", "YY").toLanguageTag();
将返回“xx-yy”,但是语言子标签“xx”和区域子标签“YY”无效,因为它们未注册在IANA语言子标签注册表中。
forLanguageTag(String)
public static Locale forLanguageTag(String languageTag)
如果指定的语言标签包含任何不正确的子标签,则忽略第一个这样的子标签和所有后续子标签。 与Locale.Builder.setLanguageTag(java.lang.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的“语言标签”生成,因此支持grandfathered(常规和不规则)以及私人使用语言标签。 独立的私人使用标签被表示为空语言和扩展名“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语言分条注册表(搜索“类型:grandfathered”)。
注意 :不保证toLanguageTag
和forLanguageTag
将往返。
languageTag
- 语言标签
NullPointerException
- 如果
languageTag
是
null
toLanguageTag()
,
Locale.Builder.setLanguageTag(String)
public String getISO3Language() throws MissingResourceException
MissingResourceException
- 如果三个字母的语言缩写不适用于此语言环境,则抛出MissingResourceException。
public String getISO3Country() throws MissingResourceException
ISO 3166-1代码可以在线查找。
MissingResourceException
- 如果三个字母的国家/地区缩写不适用于此语言环境,则抛出MissingResourceException异常。
public final String getDisplayLanguage()
DISPLAY
区域设置。
例如,如果语言环境是fr_FR,并且默认的DISPLAY
语言环境是en_US,getDisplayLanguage()将返回“French”;
如果语言环境是en_US,默认的DISPLAY
语言环境是fr_FR,getDisplayLanguage()将返回“anglais”。
如果返回的名称不能被本地化为默认的DISPLAY
区域设置(例如,我们没有克罗地亚语的日语名称),则此功能将返回英文名称,并使用ISO代码作为最后的手段值。
如果语言环境未指定语言,则此函数返回空字符串。
public String getDisplayLanguage(Locale inLocale)
inLocale
- 要检索显示语言的区域设置。
NullPointerException
- 如果
inLocale
是
null
public String getDisplayScript(Locale inLocale)
inLocale
- 要检索显示脚本的区域设置。
DISPLAY
语言环境的脚本代码的显示名称
NullPointerException
- 如果
inLocale
是
null
public final String getDisplayCountry()
DISPLAY
区域设置。
例如,如果语言环境是fr_FR,并且默认的DISPLAY
语言环境是en_US,则getDisplayCountry()将返回“France”;
如果语言环境是en_US,并且默认的DISPLAY
语言环境是fr_FR,则getDisplayCountry()将返回“Etats-Unis”。
如果返回的名称无法针对默认的DISPLAY
区域设置进行本地化(例如,我们没有克罗地亚的日语名称),则此功能将返回英文名称,并使用ISO代码作为最后的手段值。
如果区域设置未指定国家/地区,则此函数返回空字符串。
public String getDisplayCountry(Locale inLocale)
inLocale
- 要检索显示国家/地区的区域设置。
NullPointerException
- 如果
inLocale
是
null
public final String getDisplayVariant()
public String getDisplayVariant(Locale inLocale)
inLocale
- 要检索显示变体代码的区域设置。
NullPointerException
- 如果
inLocale
是
null
public final String getDisplayName()
language (script, country, variant)取决于在区域设置中指定的字段。 如果语言,脚本,国家和变体字段都为空,则此函数返回空字符串。
language (country)
language (variant)
script (country)
country
public String getDisplayName(Locale inLocale)
language (script, country, variant)取决于在区域设置中指定的字段。 如果语言,脚本,国家和变体字段都为空,则此函数返回空字符串。
language (country)
language (variant)
script (country)
country
inLocale
- 要检索显示名称的区域设置。
NullPointerException
- 如果
inLocale
是
null
public int hashCode()
hashCode
在
Object
类
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
equals
在
Object
obj
- 与之比较的参考对象。
Object.hashCode()
, HashMap
public static List<Locale> filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales, Locale.FilteringMode mode)
Locale
实例的列表。
priorityList
- 用户的语言优先级列表,其中每个语言标签按照优先级或权重按降序排序
locales
-
Locale
用于匹配实例
mode
- 过滤模式
Locale
实例的列表,用于匹配按照优先级或权重降序排序的语言标签,如果没有匹配,则为空列表。
列表是可修改的。
NullPointerException
- 如果
priorityList
或
locales
是
null
IllegalArgumentException
- 如果在指定
Locale.FilteringMode.REJECT_EXTENDED_RANGES
时给定列表中包含一个或多个扩展语言范围
public static List<Locale> filter(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
Locale
使用RFC 4647中定义的过滤机制这相当于实例
filter(List, Collection, FilteringMode)
时
mode
是
Locale.FilteringMode.AUTOSELECT_FILTERING
。
priorityList
- 用户的语言优先级列表,其中每个语言标签按照优先级或权重按降序排序
locales
-
Locale
用于匹配实例
Locale
实例的列表,用于匹配按照优先级或权重降序排序的语言标签,如果没有匹配,则为空列表。
列表是可修改的。
NullPointerException
- 如果
priorityList
或
locales
是
null
public static List<String> filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags, Locale.FilteringMode mode)
priorityList
- 用户的语言优先级列表,其中每个语言标签根据优先级或权重按降序排序
tags
- 语言标签
mode
- 过滤模式
NullPointerException
- 如果
priorityList
或
tags
是
null
IllegalArgumentException
- 如果指定了
Locale.FilteringMode.REJECT_EXTENDED_RANGES
时给定列表中包含一个或多个扩展语言范围
public static List<String> filterTags(List<Locale.LanguageRange> priorityList, Collection<String> tags)
filterTags(List, Collection, FilteringMode)
时
mode
是
Locale.FilteringMode.AUTOSELECT_FILTERING
。
priorityList
- 用户的语言优先级列表,其中每个语言标签按照优先级或权重按降序排序
tags
- 语言标签
NullPointerException
- 如果
priorityList
或
tags
是
null
public static Locale lookup(List<Locale.LanguageRange> priorityList, Collection<Locale> locales)
Locale
实例。
priorityList
- 用户的语言优先级列表,其中每个语言标签按照优先级或权重按降序排序
locales
-
Locale
用于匹配实例
Locale
实例,如果没有匹配,
null
。
NullPointerException
- 如果
priorityList
或
tags
是
null
public static String lookupTag(List<Locale.LanguageRange> priorityList, Collection<String> tags)
priorityList
- 用户的语言优先级列表,其中每种语言标签按照优先级或权重按降序排序
tags
- 用于匹配的语言
tags
null
。
NullPointerException
- 如果
priorityList
或
tags
是
null