我应该为多语言网站设置哪个http标头?

时间:2016-04-28 20:51:07

标签: php html http http-headers multilingual

我目前正在开发一个多语言网站,这是我的情况:

根据thisthis 文章中的答案,我也需要设置一个http-header,但我无法弄清楚如何做到这一点以及我应该设置什么样的标头。是Accept-Language还是Content-Language?是否必须为多语言网站设置http-header?并且Accept-Language是请求而不是响应吗?

请帮忙!谢谢!

1 个答案:

答案 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