Module java.base
Package java.util

Class Locale.LanguageRange

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

public static final class Locale.LanguageRange extends Object
该类表示在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 Details

    • MAX_WEIGHT

      public static final double MAX_WEIGHT
      一个常量,表示权重的最大值为1.0,表示语言范围非常适合用户。
      参见:
    • MIN_WEIGHT

      public static final double MIN_WEIGHT
      一个常量,表示权重的最小值为0.0,表示语言范围不太适合用户。
      参见:
  • Constructor Details

    • 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
  • Method Details

    • 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"  (带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

      public static List<Locale.LanguageRange> parse(String ranges, Map<String,List<String>> map)
      解析给定的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)
      使用给定的priorityListmap生成一个新的自定义语言优先级列表。如果给定的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 - 如果priorityListnull
      参见:
    • hashCode

      public int hashCode()
      为此对象返回一个哈希码值。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值
      参见:
    • equals

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

      public String toString()
      返回此LanguageRange对象的信息性字符串表示,包括语言范围和权重(如果范围加权且权重小于最大权重)。
      覆盖:
      toString 在类 Object
      返回:
      LanguageRange对象的字符串表示。