HTTP |语言标签与语言范围

时间:2012-11-20 13:01:11

标签: http

通过HTTP specification阅读我遇到的术语“语言标签”和“语言范围”。该标准定义了这两个实体之间的差异如下:

  

语言范围与语言标记匹配,如果它完全等于标记,或者它与标记的前缀完全相等,使得前缀后面的第一个标记字符为“ - ”。

但是,该文件并未通过任何示例来扩充此声明。那么,语言范围与以下HTTP头字段中的language-tag有何不同:

Accept-Language: en, en-gb, en-us

如果他们在这里没有区别,你能举出他们所做的任何例子。

更新


我会用以下方式重述上述引用:

  

如果语言的标签或标签的前缀与Accept-Language字段中指定的语言范围完全相等,则认为该语言是可接受的。

3 个答案:

答案 0 :(得分:3)

语言标记是特定语言的标识符。用特定语言编写的网页可能会使用该语言的标记进行标记,例如美国英语en-US(与其他英语方言相对,如英国英语或澳大利亚英语)。 en也是一般英语的有效语言标记。

语言范围是您的浏览器更喜欢从网络服务器接收的内容。这是一个范围,因为它可能与资源的语言不完全匹配:如果您的浏览器说它喜欢语言范围en,则表示enen-US,{{1 所有可接受 - 范围en-UK与完整标记en匹配,以及所有以en开头的标记。

如您所见,en-既是语言标记又是语言范围。两者的区别在于它们的用法:标签标识内容的特定语言,并从Web服务器发送到客户端,而范围标识语言首选项,并从客户端发送到Web服务器。

en请求标头中的所有值都是语言范围。语言标记用于Accept-Language 响应标题。

答案 1 :(得分:2)

en是一个范围,它与标记en-gb匹配,因为它完全等于前缀en-gb(前缀为en)和前缀后面的第一个字符(en)是-

答案 2 :(得分:1)

RFC确实提供了一个例子。如果查看Accept-Language请求标头的规范:

  

Accept-Language请求标头字段类似于Accept,但是      限制首选的自然语言集      对请求的回应。语言标签在section 3.10中定义。

  Accept-Language = "Accept-Language" ":"
                     1#( language-range [ ";" "q" "=" qvalue ] )
  language-range  = ( ( 1*8ALPHA *( "-" 1*8ALPHA ) ) | "*" )
     

[...]

  Accept-Language: da, en-gb;q=0.8, en;q=0.7
     

[...]“我更喜欢丹麦语,但会接受英国英语和英语      其他类型的英语。“

第3.10节提到:

  

语言标签的名称空间由IANA管理。

因此,所有语言标记都已注册here。输入RFC 2616:

  

语言范围在Accept-Language标头中使用)与语言标记匹配      它完全等于标签,或者它是否恰好等于标签的前缀      标记使得前缀后面的第一个标记字符是“ - ”。

因此,en中的Accept-Language: en匹配en-gben-US。如果客户希望单个范围有多个匹配,则应指定子标签并为每个子标签指定质量值(;q=)以获得最佳结果。

如果没有,服务器将决定它将返回哪个可用的表示。