我目前在一个多语言网站上工作,我的情况是:
- 我正在将用户重定向到特定语言的页面:例如。http://www.example.com/en/或http://www.example.com/nl/
- 在每一页上,我都使用
html-lang
标签:<html lang="<?php echo $lang; ?>">
- 在每一页中,我都使用
hreflang
标签
根据本文和本文中的答案,我也需要设置一个http标头,但我不知道如何做到这一点,也不知道应该设置什么样的标头。是Accept-Language
还是Content-Language
?为多语言网站设置http头真的是必须的吗?Accept Language是请求而不是响应吗?
请帮忙!非常感谢。
为多语言网站设置http头真的是必须的吗?
来自HTTP标头、元元素和语言信息-W3.org:
在指定文本处理的语言时,您是在声明实际编写特定范围文本的语言,以便操作文本的用户代理或应用程序(如语音浏览器、拼写检查器或样式处理程序)能够有效地处理有问题的文本。
因此,从可用性的角度来看,声明页面上使用的语言以及页面预期受众的语言是有意义的。
有关如何指定,请参阅同一页:
HTTP内容语言标头可用于提供有关页面的预期受众的元数据,并可指示这是一种以上的语言。不应再使用元元素上http equiv属性的Content-Language值。您应该在html标记上使用language属性来声明页面中实际文本的默认语言。
内容语言的HTML元标签:
应该真正在标题中表达。例如:
Content-language: es
Accept-Language
不是响应标头,而是请求标头,因此将Content-language
同时作为响应标头和HTML元素中的<html lang="">
属性,您就可以使用它了。
至于Vary: X, Y
响应标头:这意味着当标头X或Y不同时,对当前请求URI的响应将不同。
例如,在进行重定向时,这一点非常重要。假设在您的登录页上,您根据Accept-Language
请求标头确定重定向位置:
GET / HTTP/1.1
Host: example.com
Accept-Language: en
然后,您的网站将重定向到英文子网站:
HTTP/1.1 302 Found
Location: http://example.com/en
Vary: Accept-Language
这将告诉用户代理(浏览器、搜索引擎),用不同的Accept-Language
请求相同的URI将产生不同的结果。例如:
GET / HTTP/1.1
Host: example.com
Accept-Language: es
然后,您的网站将重定向到西班牙子网站:
HTTP/1.1 302 Found
Location: http://example.com/es
Vary: Accept-Language