java.lang.Object
java.util.Locale.LanguageRange
- 封装类:
-
Locale
该类表示在RFC 4647 语言标签匹配中定义的语言范围。语言范围是一个标识符,用于通过Locale匹配中描述的机制选择符合特定要求的语言标签。表示用户偏好并由语言范围组成的列表称为语言优先级列表。
有两种类型的语言范围:基本和扩展。在RFC 4647中,语言范围的语法如下所示:ABNF
例如,基本语言范围 = (1*8ALPHA *("-" 1*8alphanum)) / "*" 扩展语言范围 = (1*8ALPHA / "*") *("-" (1*8alphanum / "*")) alphanum = ALPHA / DIGIT
"en"
(英语),"ja-JP"
(日语,日本),"*"
(特殊语言范围,匹配任何语言标签)是基本语言范围,而"*-CH"
(任何语言,瑞士),"es-*"
(西班牙语,任何地区),"zh-Hant-*"
(繁体中文,任何地区)是扩展语言范围。
- 自Java版本:
- 1.8
- 外部规范
- 参见:
-
Field Summary
Modifier and TypeFieldDescriptionstatic final double
一个常量,表示权重的最大值为1.0,表示语言范围非常适合用户。static final double
一个常量,表示权重的最小值为0.0,表示语言范围不太适合用户。 -
Constructor Summary
ConstructorDescriptionLanguageRange
(String range) 使用给定的range
构造一个LanguageRange
。LanguageRange
(String range, double weight) 使用给定的range
和weight
构造一个LanguageRange
。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
将此对象与指定对象进行比较。getRange()
返回此LanguageRange
的语言范围。double
返回此LanguageRange
的权重。int
hashCode()
为此对象生成一个哈希码值。static List
<Locale.LanguageRange> mapEquivalents
(List<Locale.LanguageRange> priorityList, Map<String, List<String>> map) 使用给定的priorityList
和map
生成一个新的自定义语言优先级列表。static List
<Locale.LanguageRange> 解析给定的ranges
以生成一个语言优先级列表。static List
<Locale.LanguageRange> 解析给定的ranges
以生成一个语言优先级列表,然后使用给定的map
自定义列表。toString()
返回此LanguageRange
对象的信息性字符串表示,包括语言范围和权重(如果范围带权重且权重小于最大权重)。
-
Field Details
-
MAX_WEIGHT
public static final double MAX_WEIGHT一个常量,表示权重的最大值为1.0,表示语言范围非常适合用户。- 参见:
-
MIN_WEIGHT
public static final double MIN_WEIGHT一个常量,表示权重的最小值为0.0,表示语言范围不太适合用户。- 参见:
-
-
Constructor Details
-
LanguageRange
使用给定的range
构造一个LanguageRange
。请注意,在构造时不会对IANA语言子标记注册表进行验证。这相当于
LanguageRange(range, MAX_WEIGHT)
。- 参数:
-
range
- 语言范围 - 抛出:
-
NullPointerException
- 如果给定的range
为null
-
IllegalArgumentException
- 如果给定的range
不符合RFC 4647中提到的语言范围的语法
-
LanguageRange
使用给定的range
和weight
构造一个LanguageRange
。请注意,在构造时不会对IANA语言子标记注册表进行验证。- 参数:
-
range
- 语言范围 -
weight
- 介于MIN_WEIGHT
和MAX_WEIGHT
之间的权重值 - 抛出:
-
NullPointerException
- 如果给定的range
为null
-
IllegalArgumentException
- 如果给定的range
不符合RFC 4647中提到的语言范围的语法,或者给定的weight
小于MIN_WEIGHT
或大于MAX_WEIGHT
-
-
Method Details
-
getRange
返回此LanguageRange
的语言范围。- 返回:
- 语言范围。
-
getWeight
public double getWeight()返回此LanguageRange
的权重。- 返回:
- 权重值。
-
parse
解析给定的ranges
以生成一个语言优先级列表。此方法对给定的
ranges
中的每个语言范围执行语法检查,但不使用IANA语言子标记注册表进行验证。要给出的
ranges
可以采用以下形式之一:"Accept-Language: ja,en;q=0.4" (带Accept-Language前缀的加权列表) "ja,en;q=0.4" (加权列表) "ja,en" (优先级列表)
在加权列表中,每个语言范围都被赋予一个权重值。权重值与RFC 2616中的“质量值”相同,表示用户偏好该语言的程度。权重值在对应的语言范围之后指定,后跟";q="
,如果省略,则默认权重值为MAX_WEIGHT
。与加权列表不同,优先级列表中的语言范围根据其优先级按降序排序。第一个语言范围具有最高优先级,并最符合用户的偏好。
在任一情况下,语言范围根据优先级或权重按降序排序在语言优先级列表中。如果一个语言范围在给定的
ranges
中出现多次,则只包括第一个语言优先级列表中。返回的列表包含来自给定
ranges
和它们在IANA语言子标记注册表中找到的等效语言范围。例如,如果给定的ranges
是"Accept-Language: iw,en-us;q=0.7,en;q=0.3"
,则要返回的列表中的元素为:范围 权重 "iw" (希伯来语的旧标记) 1.0 "he" (希伯来语的新首选代码) 1.0 "en-us" (英语,美国) 0.7 "en" (英语) 0.3
两个语言范围,"iw"
和"he"
,在列表中具有相同的最高优先级。通过将"he"
添加到用户的语言优先级列表中,locale-matching方法可以找到希伯来语作为匹配的区域设置(或语言标签),即使应用程序或系统仅提供"he"
作为受支持的区域设置(或语言标签)。- 参数:
-
ranges
- 逗号分隔的语言范围列表,或以RFC 2616中定义的"Accept-Language"头部形式的语言范围列表 - 返回:
-
由给定
ranges
中包含的语言范围及其等效语言范围(如果有)组成的语言优先级列表。该列表是可修改的。 - 抛出:
-
NullPointerException
- 如果ranges
为null -
IllegalArgumentException
- 如果在给定的ranges
中找到的语言范围或权重格式不正确 - 外部规范
-
parse
解析给定的ranges
以生成一个语言优先级列表,并使用给定的map
自定义列表。此方法等同于mapEquivalents(parse(ranges), map)
。- 参数:
-
ranges
- 逗号分隔的语言范围列表或以“Accept-Language”标头形式定义在RFC 2616中的语言范围列表 -
map
- 包含自定义语言范围信息的映射 - 返回:
- 带有自定义的语言优先级列表。该列表可修改。
- 抛出:
-
NullPointerException
- 如果ranges
为null -
IllegalArgumentException
- 如果给定ranges
中的语言范围或权重格式不正确 - 外部规范
- 参见:
-
mapEquivalents
public static List<Locale.LanguageRange> mapEquivalents(List<Locale.LanguageRange> priorityList, Map<String, List<String>> map) 使用给定的priorityList
和map
生成一个新的自定义语言优先级列表。如果给定的map
为空,则此方法返回给定priorityList
的副本。在映射中,键表示语言范围,而值是其等效项列表。映射中不能使用
'*'
。每个等效语言范围具有与其原始语言范围相同的权重值。映射示例: 键 值 "zh"(中文) "zh", "zh-Hans"(简体中文) "zh-HK"(中文,香港) "zh-HK" "zh-TW"(中文,台湾) "zh-TW"
自定义是在使用 IANA 语言子标记注册表进行修改后执行的。例如,如果用户的语言优先级列表包含五个语言范围(
"zh"
,"zh-CN"
,"en"
,"zh-TW"
和"zh-HK"
),使用上述映射示例定制的新生成的语言优先级列表将包含"zh"
,"zh-Hans"
,"zh-CN"
,"zh-Hans-CN"
,"en"
,"zh-TW"
和"zh-HK"
。"zh-HK"
和"zh-TW"
即使包含在语言优先级列表中,也不会转换为"zh-Hans-HK"
或"zh-Hans-TW"
。在此示例中,映射用于清楚区分简体中文和繁体中文。如果映射中不包含
"zh"
到"zh"
的映射,将执行简单替换,定制列表将不包含"zh"
和"zh-CN"
。- 参数:
-
priorityList
- 用户的语言优先级列表 -
map
- 包含自定义语言范围信息的映射 - 返回:
- 带有自定义的新语言优先级列表。该列表可修改。
- 抛出:
-
NullPointerException
- 如果priorityList
为null
- 参见:
-
hashCode
public int hashCode()为此对象返回一个哈希码值。 -
equals
将此对象与指定对象进行比较。仅当参数不为null
且为包含与此对象相同range
和weight
值的LanguageRange
对象时,结果为true。 -
toString
返回此LanguageRange
对象的信息性字符串表示,包括语言范围和权重(如果范围加权且权重小于最大权重)。
-