模块 java.base
 java.util

类 Locale.LanguageRange

java.lang.Object
java.util.Locale.LanguageRange
封闭类:
Locale

public static final class Locale.LanguageRange extends Object
此类表示在 RFC 4647 语言标签匹配 中定义的 Language Range。语言范围是一个标识符,用于通过使用 locale匹配 中描述的机制来选择满足特定要求的语言标签。代表用户偏好并由语言范围组成的列表称为 Language Priority List

有两种类型的语言范围:基本和扩展。在 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-*" (繁体中文,任何地区)都是扩展的语言范围。
自从:
1.8
参见:
  • 字段详细信息

    • 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)
      使用给定的 range 构造一个 LanguageRange 。请注意,在构建时没有针对 IANA 语言子标签注册表进行任何验证。

      这相当于 LanguageRange(range, MAX_WEIGHT)

      参数:
      range - 语言范围
      抛出:
      NullPointerException - 如果给定的 rangenull
      IllegalArgumentException - 如果给定的 range 不符合 RFC 4647 中提到的语言范围的语法
    • LanguageRange

      public LanguageRange(String  range, double weight)
      使用给定的 rangeweight 构造一个 LanguageRange。请注意,在构建时没有针对 IANA 语言子标签注册表进行任何验证。
      参数:
      range - 语言范围
      weight - 介于 MIN_WEIGHTMAX_WEIGHT 之间的权重值
      抛出:
      NullPointerException - 如果给定的 rangenull
      IllegalArgumentException - 如果给定的 range 不符合 RFC 4647 中提到的语言范围的语法,或者如果给定的 weight 小于 MIN_WEIGHT 或大于 MAX_WEIGHT
  • 方法详情

    • getRange

      public String  getRange()
      返回此 LanguageRange 的语言范围。
      返回:
      语言范围。
    • getWeight

      public double getWeight()
      返回此 LanguageRange 的权重。
      返回:
      权重值。
    • parse

      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

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

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

      返回的列表包含来自给定 ranges 的语言范围及其在 IANA 语言子标签注册表中找到的等效项。例如,如果给定的 ranges"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”标头形式的语言范围列表
      返回:
      语言优先级列表,由给定 ranges 中包含的语言范围及其等效语言范围(如果有)组成。该列表是可修改的。
      抛出:
      NullPointerException - 如果 ranges 为空
      IllegalArgumentException - 如果在给定的 ranges 中找到的语言范围或权重格式错误
    • parse

      public static List <Locale.LanguageRange > parse(String  ranges, Map <String ,List <String >> map)
      解析给定的 ranges 以生成语言优先级列表,然后使用给定的 map 自定义列表。此方法等效于 mapEquivalents(parse(ranges), map)
      参数:
      ranges - 以逗号分隔的语言范围列表或以 RFC 2616 中定义的“Accept-Language”标头形式的语言范围列表
      map - 包含自定义语言范围信息的map
      返回:
      具有自定义的语言优先级列表。该列表是可修改的。
      抛出:
      NullPointerException - 如果 ranges 为空
      IllegalArgumentException - 如果在给定的 ranges 中找到的语言范围或权重格式错误
      参见:
    • mapEquivalents

      public static List <Locale.LanguageRange > mapEquivalents(List <Locale.LanguageRange > priorityList, Map <String ,List <String >> map)
      使用给定的 priorityListmap 生成新的自定义语言优先级列表。如果给定的 map 为空,则此方法返回给定的 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" 映射不包含在map中,将执行简单替换,自定义列表将不包含 "zh""zh-CN"

      参数:
      priorityList - 用户的语言优先列表
      map - 包含自定义语言范围信息的map
      返回:
      具有自定义功能的新语言优先级列表。该列表是可修改的。
      抛出:
      NullPointerException - 如果 priorityListnull
      参见:
    • hashCode

      public int hashCode()
      返回对象的哈希码值。
      重写:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • equals

      public boolean equals(Object  obj)
      将此对象与指定对象进行比较。当且仅当参数不是 null 并且是包含与该对象相同的 rangeweight 值的 LanguageRange 对象时,结果为真。
      重写:
      equals 在类 Object
      参数:
      obj - 要与之比较的对象
      返回:
      true 如果此对象的 rangeweightobj 相同; false否则。
      参见:
    • toString

      public String  toString()
      返回此 LanguageRange 对象的信息字符串表示形式,如果范围已加权且权重小于最大权重,则由语言范围和权重组成。
      重写:
      toString 在类 Object
      返回:
      LanguageRange 对象的字符串表示形式。