1

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

如果语言范围完全等于标记,或者如果它完全等于标记的前缀,则语言范围匹配语言标记,这样前缀后面的第一个标记字符是“-”。

但是,该文档没有通过任何示例来扩充此声明。那么,语言范围与以下 HTTP 标头字段中的语言标签有何不同:

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

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

更新


我将用以下方式改写上述引用:

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

4

3 回答 3

3

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

语言范围是您的浏览器表示它更愿意从网络服务器接收的内容。它是一个范围,因为它可能与资源的语言不完全匹配:如果您的浏览器说它喜欢语言范围en,这意味着en, en-US,en-UK都是可以接受的——范围en与确切的标签匹配en,以及所有以en-.

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

请求标头中的所有Accept-Language都是语言范围。Content-Language 响应标头中使用语言标签。

于 2012-11-20T13:15:22.483 回答
2

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

于 2012-11-20T13:12:37.373 回答
1

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

Accept-Language 请求标头字段类似于 Accept,但限制了作为对请求的响应首选的自然语言集。语言标签在第 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 管理。

所以所有的语言标签都在这里注册。输入 RFC 2616:

语言范围如在 Accept-Language 标头中使用的)匹配语言标签,如果它完全等于标签,或者如果它完全等于标签的前缀,这样前缀后面的第一个标签字符是“-”。

所以,enAccept-Language: en比赛en-gben-US. 如果客户端希望单个范围有多个匹配项,则应指定子标签并为;q=每个子标签分配一个质量值 ( ) 以获得最佳结果。

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

于 2012-11-20T13:16:48.637 回答