阅读(346) (0)

鸿蒙OS Locale.LanguageRange

2022-06-16 16:26:04 更新

Locale.LanguageRange

java.lang.Object

|---java.util.Locale.LanguageRange

public static final class Locale.LanguageRange
extends Object

此类表示 RFC 4647 语言标签匹配中定义的语言范围。 语言范围是一个标识符,用于通过使用区域设置匹配中描述的机制来选择满足特定要求的语言标签。 代表用户偏好并由语言范围组成的列表称为语言优先级列表。

有两种类型的语言范围:基本和扩展。 在 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-”(繁体中文,任何地区)是扩展的语言范围。

字段摘要

修饰符喝类型 字段 描述
static double MAX_WEIGHT 保持权重最大值 1.0 的常数,表示语言范围非常适合用户。
static double MIN_WEIGHT 保持权重最小值 0.0 的常数,表示语言范围不适合用户。

构造函数摘要

构造函数 描述
LanguageRange(String range) 使用给定范围构造 LanguageRange。
LanguageRange(String range, double weight) 使用给定的范围和权重构造 LanguageRange。

方法总结

修饰符喝类型 方法 描述
boolean equals(Object obj) 将此对象与指定对象进行比较。
String getRange() 返回此 LanguageRange 的语言范围。
double getWeight() 返回此 LanguageRange 的权重。
int hashCode() 返回对象的哈希码值。
static ListLocale.LanguageRange mapEquivalents(ListLocale.LanguageRange priorityList, MapString,ListString map) 使用给定的 priorityList 和映射生成新的自定义语言优先级列表。
static ListLocale.LanguageRange parse(String ranges) 解析给定的范围以生成语言优先级列表。
static ListLocale.LanguageRange parse(String ranges, MapString,ListString map) 解析给定范围以生成语言优先级列表,然后使用给定映射自定义列表。
从类 java.lang.Object 继承的方法
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait

字段详细信息

MAX_WEIGHT

public static final double MAX_WEIGHT

保持权重最大值 1.0 的常数,表示语言范围非常适合用户。

MIN_WEIGHT

public static final double MIN_WEIGHT

保持权重最小值 0.0 的常数,表示语言范围不适合用户。

构造函数详细信息

LanguageRange

public LanguageRange(String range)

使用给定范围构造 LanguageRange。 请注意,在构建时不会针对 IANA 语言子标签注册表进行验证。

这相当于 LanguageRange(range, MAX_WEIGHT)。

参数:

参数名称 参数描述
range 语言范围

Throws:

Throw名称 Throw描述
NullPointerException 如果给定范围为空

LanguageRange

public LanguageRange(String range, double weight)

使用给定的范围和权重构造 LanguageRange。 请注意,在构建时不会针对 IANA 语言子标签注册表进行验证。

参数:

参数名称 参数描述
range 语言范围
weight 介于 MIN_WEIGHT 和 MAX_WEIGHT 之间的权重值

Throws:

Throw名称 Throw描述
NullPointerException 如果给定范围为空
IllegalArgumentException 如果给定的重量小于 MIN_WEIGHT 或大于 MAX_WEIGHT

方法详情

getRange

public String getRange()

返回此 LanguageRange 的语言范围。

返回:

语言范围。

getWeight

public double getWeight()

返回此 LanguageRange 的权重。

返回:

weight 值。

parse

public static ListLocale.LanguageRange parse(String ranges)

解析给定的范围以生成语言优先级列表。

此方法对给定范围内的每个语言范围执行语法检查,但不使用 IANA 语言子标签注册表进行验证。

要给出的范围可以采用以下形式之一:

   "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。

与加权列表不同,优先列表中的语言范围根据其优先级按降序排列。第一语言范围的优先级最高,最符合用户的偏好。

在任何一种情况下,语言范围都会根据优先级或权重在语言优先级列表中按降序排序。如果一个语言范围多次出现在给定的范围中,则只有第一个包含在语言优先级列表中。

返回的列表由给定范围中的语言范围及其在 IANA 语言子标签注册表中找到的等价物组成。例如,如果给定的范围是“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 中定义的“Accept-Language”标头形式的语言范围列表

返回:

语言优先级列表,包括给定范围内的语言范围及其等效的语言范围(如果有)。 该列表是可修改的。

Throws:

Throw名称 Throw描述
NullPointerException 如果 ranges 为空
IllegalArgumentException 如果在给定范围内找到的语言范围或权重格式不正确

parse

public static ListLocale.LanguageRange parse(String ranges, MapString,ListString map)

解析给定范围以生成语言优先级列表,然后使用给定映射自定义列表。 该方法等价于 mapEquivalents(parse(ranges), map)。

参数:

参数名称 参数描述
ranges 以逗号分隔的语言范围列表或以 RFC 2616 中定义的“Accept-Language”标头形式的语言范围列表
map 包含自定义语言范围信息的 map

返回:

带有自定义的语言优先级列表。 该列表是可修改的。

Throws:

Throw名称 Throw描述
NullPointerException 如果 ranges 为空
IllegalArgumentException 如果在给定范围内找到的语言范围或权重格式不正确

mapEquivalents

public static ListLocale.LanguageRange mapEquivalents(ListLocale.LanguageRange priorityList, MapString,ListString map)

使用给定的 priorityList 和映射生成新的自定义语言优先级列表。 如果给定映射为空,则此方法返回给定 priorityList 的副本。

在 map 中,键表示语言范围,而值是它的等价物列表。 '*' 不能在 map 中使用。 每个等效语言范围具有与其原始语言范围相同的权重值。

  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”)组成,则新生成的语言优先级列表 使用上面的 map 示例自定义将由“zh”、“zh-Hans”、“zh-CN”、“zh-Hans-CN”、“en”、“zh-TW”和“zh-HK”组成 .

“zh-HK”和“zh-TW”不会转换为“zh-Hans-HK”或“zh-Hans-TW”,即使它们包含在语言优先级列表中。 在这个例子中,映射用于清楚地区分简体中文和繁体中文。

如果映射中不包含“zh”-to-“zh”映射,将执行简单替换,自定义列表将不包含“zh”和“zh-CN”。

参数:

参数名称 参数描述
priorityList 用户的语言优先级列表
map 包含自定义语言范围信息的 map

返回:

具有自定义功能的新语言优先级列表。 该列表是可修改的。

Throws:

Throw名称 Throw描述
NullPointerException 如果 priorityList 为空

hashCode

public int hashCode()

返回对象的哈希码值。

覆盖:

类 Object 中的 hashCode

返回:

此对象的哈希码值。

equals

public boolean equals(Object obj)

将此对象与指定对象进行比较。 当且仅当参数不为 null 并且是包含与此对象相同的范围和权重值的 LanguageRange 对象时,结果才为 true。

覆盖:

类 Object 中的等于

参数:

参数名称 参数描述
obj 比较的对象

返回:

如果此对象的范围和权重与 obj 相同,则为 true; 否则为 false。