public static final class Locale.LanguageRange extends Object
有两种类型的语言范围:基本和扩展。 在RFC 4647中,语言范围的语法如下所示: ABNF
例如,basic-language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*" extended-language-range = (1*8ALPHA / "*") *("-" (1*8alphanum / "*")) alphanum = ALPHA / DIGIT
"en"
(英文), "ja-JP"
(日本,日本), "*"
(与任何语言标签匹配的特殊语言范围)是基本语言范围,而"*-CH"
(任何语言,瑞士), "es-*"
(西班牙语,任何地区)和"zh-Hant-*"
(繁体中文,任何地区)是扩展语言范围。
Locale.filter(java.util.List<java.util.Locale.LanguageRange>, java.util.Collection<java.util.Locale>, java.util.Locale.FilteringMode)
,
Locale.filterTags(java.util.List<java.util.Locale.LanguageRange>, java.util.Collection<java.lang.String>, java.util.Locale.FilteringMode)
,
Locale.lookup(java.util.List<java.util.Locale.LanguageRange>, java.util.Collection<java.util.Locale>)
,
Locale.lookupTag(java.util.List<java.util.Locale.LanguageRange>, java.util.Collection<java.lang.String>)
Modifier and Type | Field and Description |
---|---|
static double |
MAX_WEIGHT
持有权重最大值的常数为1.0,表示语言范围适合用户。
|
static double |
MIN_WEIGHT
保持最小权重值的常数为0.0,表示语言范围不适合用户。
|
Constructor and Description |
---|
LanguageRange(String range)
构造一个
LanguageRange 使用给定
range 。
|
LanguageRange(String range, double weight)
构造一个
LanguageRange 使用给定
range 和
weight 。
|
Modifier and Type | Method and Description |
---|---|
boolean |
equals(Object obj)
将此对象与指定的对象进行比较。
|
String |
getRange()
返回此
LanguageRange 的语言范围。
|
double |
getWeight()
返回这个
LanguageRange 的权重。
|
int |
hashCode()
返回对象的哈希码值。
|
static List<Locale.LanguageRange> |
mapEquivalents(List<Locale.LanguageRange> priorityList, Map<String,List<String>> map)
使用给定的
priorityList 和
map 生成新的自定义语言优先级列表。
|
static List<Locale.LanguageRange> |
parse(String ranges)
解析给定的
ranges 以生成语言优先级列表。
|
static List<Locale.LanguageRange> |
parse(String ranges, Map<String,List<String>> map)
解析给定的
ranges 以生成语言优先级列表,然后使用给定的
map 自定义列表。
|
public static final double MAX_WEIGHT
public static final double MIN_WEIGHT
public LanguageRange(String range)
LanguageRange
使用给定range
。
请注意,在建造时,不对IANA语言分条登记处进行验证。
这相当于LanguageRange(range, MAX_WEIGHT)
。
range
- 语言范围
NullPointerException
- 如果给定的
range
是
null
public LanguageRange(String range, double weight)
LanguageRange
使用给定range
和weight
。
请注意,在建造时,不对IANA语言分条登记处进行验证。
range
- 一个语言范围
weight
- 权重值在
MIN_WEIGHT
和
MAX_WEIGHT
之间
NullPointerException
- 如果给定的
range
是
null
IllegalArgumentException
- 如果给定的
weight
小于
MIN_WEIGHT
或大于
MAX_WEIGHT
public String getRange()
LanguageRange
的语言范围。
public double getWeight()
LanguageRange
的重量。
public static List<Locale.LanguageRange> parse(String ranges)
ranges
以生成语言优先级列表。
该方法对给定的ranges
中的每个语言范围执行语法检查,但不使用IANA语言子标记注册表进行验证。
要给予的ranges
可以采取以下形式之一:
"Accept-Language: ja,en;q=0.4" (weighted list with Accept-Language prefix)
"ja,en;q=0.4" (weighted list)
"ja,en" (prioritized list)
在加权列表中,每个语言范围都被赋予权重值。
权重值与RFC 2616中的“质量值” 相同 ,它表示用户偏好语言的多少。
重量值在相应的语言范围后面跟着";q="
,默认的权重值在MAX_WEIGHT
时为MAX_WEIGHT
。
与加权列表不同,优先级列表中的语言范围根据其优先级按降序排列。 第一语言范围具有最高优先级,最符合用户的偏好。
在这两种情况下,语言范围按照优先级或权重在语言优先级列表中按降序排列。 如果一个语言范围ranges
出现在给定的ranges
,则只有第一个包含在语言优先级列表中。
返回的列表包括来自给定的ranges
及其IANA语言分条注册表中的ranges
语言范围。 例如,如果给定的ranges
是"Accept-Language: iw,en-us;q=0.7,en;q=0.3"
, "Accept-Language: iw,en-us;q=0.7,en;q=0.3"
返回的列表中的元素是:
Range Weight
"iw" (older tag for Hebrew) 1.0
"he" (new preferred code for Hebrew) 1.0
"en-us" (English, United States) 0.7
"en" (English) 0.3
两个语言范围"iw"
和"he"
在列表中具有相同的最高优先级。
通过添加"he"
用户的语言优先级列表,语言环境的匹配方法可以找到希伯来语作为匹配区域设置(或语言标记),即使在应用程序或系统只提供"he"
作为支持的语言环境(或语言标记)。
ranges
- 以逗号分隔的语言范围或语言范围的列表,其格式为
RFC 2616中定义的“接受语言”头
ranges
中包含的语言范围组成的语言优先级列表及其等效的语言范围(如果可用)。
列表是可修改的。
NullPointerException
- 如果
ranges
为空
IllegalArgumentException
- 如果在给定的
ranges
中找到的语言范围或重量不正确
public static List<Locale.LanguageRange> parse(String ranges, Map<String,List<String>> map)
ranges
以生成语言优先级列表,然后使用给定的map
自定义列表。
此方法相当于mapEquivalents(parse(ranges), map)
。
ranges
- 以逗号分隔的语言范围或语言范围的列表,以“接受语言”标题的形式定义在
RFC 2616
map
- 包含自定义语言范围信息的地图
NullPointerException
- 如果
ranges
为空
IllegalArgumentException
- 如果在给定的
ranges
中找到的语言范围或重量是不正确的
parse(String)
,
mapEquivalents(java.util.List<java.util.Locale.LanguageRange>, java.util.Map<java.lang.String, java.util.List<java.lang.String>>)
public static List<Locale.LanguageRange> mapEquivalents(List<Locale.LanguageRange> priorityList, Map<String,List<String>> map)
priorityList
和map
生成新的自定义语言优先级列表。
如果给定的map
为空,则此方法返回给定的副本priorityList
。
在地图中,一个键表示一个语言范围,而一个值是其等价物的列表。 '*'
不能在地图上使用。 每个等效语言范围与其原始语言范围具有相同的权重值。
An example of map:
Key Value
"zh" (Chinese) "zh",
"zh-Hans"(Simplified Chinese)
"zh-HK" (Chinese, Hong Kong) "zh-HK"
"zh-TW" (Chinese, Taiwan) "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
parse(String, Map)
public int hashCode()
hashCode
在
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
null
并且是包含与此对象相同的range
和weight
值的LanguageRange
对象时,结果为真。
equals
在
Object
obj
- 要比较的对象
true
如果这个对象的range
和weight
是相同的obj
的;
false
否则。
Object.hashCode()
, HashMap