我目前正在开发一个多语言网站,这是我的情况:
html-lang
代码:<html lang="<?php echo $lang; ?>">
hreflang
标签。根据this和this 文章中的答案,我也需要设置一个http-header,但我无法弄清楚如何做到这一点以及我应该设置什么样的标头。是Accept-Language
还是Content-Language
?是否必须为多语言网站设置http-header?并且Accept-Language是请求而不是响应吗?
请帮忙!谢谢!
答案 0 :(得分:3)
是否必须为多语言网站设置http-header?
来自HTTP headers, meta elements and language information - W3.org:
指定文本处理语言时,您声明实际写入特定范围文本的语言,以便操作文本的用户代理或应用程序(例如语音浏览器,拼写检查器或样式处理器)可以有效地处理有问题的文本。
所以是的,从可用性的角度来看,声明页面上使用的语言以及页面目标受众的语言是有道理的。
有关如何指定此内容,请参阅同一页:
HTTP Content-Language标头可用于提供有关页面目标受众的元数据,并可指示这是多种语言。不应再使用元元素上的http-equiv属性的Content-Language值。您应该在html标记上使用language属性来声明页面中实际文本的默认语言。
HTML meta tag for content language:
应该在标题中表达。例如:
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