通过HTTP specification阅读我遇到的术语“语言标签”和“语言范围”。该标准定义了这两个实体之间的差异如下:
语言范围与语言标记匹配,如果它完全等于标记,或者它与标记的前缀完全相等,使得前缀后面的第一个标记字符为“ - ”。
但是,该文件并未通过任何示例来扩充此声明。那么,语言范围与以下HTTP头字段中的language-tag有何不同:
Accept-Language: en, en-gb, en-us
如果他们在这里没有区别,你能举出他们所做的任何例子。
更新
我会用以下方式重述上述引用:
如果语言的标签或标签的前缀与Accept-Language字段中指定的语言范围完全相等,则认为该语言是可接受的。
答案 0 :(得分:3)
语言标记是特定语言的标识符。用特定语言编写的网页可能会使用该语言的标记进行标记,例如美国英语en-US
(与其他英语方言相对,如英国英语或澳大利亚英语)。 en
也是一般英语的有效语言标记。
语言范围是您的浏览器更喜欢从网络服务器接收的内容。这是一个范围,因为它可能与资源的语言不完全匹配:如果您的浏览器说它喜欢语言范围en
,则表示en
,en-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-gb
和en-US
。如果客户希望单个范围有多个匹配,则应指定子标签并为每个子标签指定质量值(;q=
)以获得最佳结果。
如果没有,服务器将决定它将返回哪个可用的表示。