【问题标题】:Which http headers should I set for multi language site?我应该为多语言网站设置哪些 http 标头?
【发布时间】:2016-08-23 20:10:20
【问题描述】:

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

  • 我正在将用户重定向到特定语言的页面:例如http://www.example.com/en/http://www.example.com/nl/
  • 在每个页面上我都使用html-lang 标签:<html lang="<?php echo $lang; ?>">
  • 在每个页面上我都使用hreflang 标签。

根据thisthis article 中的答案,我也需要设置一个http-header,但我不知道该怎么做以及应该设置什么样的头。是Accept-Language 还是Content-Language?为多语言网站设置http-header真的是必须的吗? Accept-Language 是请求而不是响应?

请帮忙!谢谢!

【问题讨论】:

  • 那么为什么他们在回答中谈论设置 HTTP 标头?以及如何以正确的方式做到这一点?
  • 因为Accept-Language request 标头指示用户代理的语言设置和首选项,并且可能用于重定向或提供特定语言的文档.
  • 是的,我明白,但他们在谈论“响应带有 Vary 标头”,所以我必须做点什么。
  • 我仍然不清楚是否必须使用 Vary 标头(也请参阅您的答案下的 cmets)。

标签: php html http http-headers multilingual


【解决方案1】:

对于多语言网站设置http-header真的是必须的吗?

来自HTTP headers, meta elements and language information - W3.org

在为文本处理指定语言时,您是在声明实际编写特定范围文本的语言,以便操作文本的用户代理或应用程序(例如语音浏览器、拼写检查器或样式处理器)可以有效地处理有问题的文本。

所以,是的,从可用性的角度来看,声明页面上使用的语言以及页面目标受众的语言是有意义的。

关于如何指定,参见同一页面:

HTTP Content-Language 标头可用于提供有关页面目标受众的元数据,并且可以表明这是一种以上的语言。不应再使用 meta 元素上 http-equiv 属性的 Content-Language 值。您应该在 html 标记上使用语言属性来声明页面中实际文本的默认语言。

还有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

【讨论】:

  • 谢谢!所以我根本不需要在我的多语言网站中设置 Vary 标题(与语言相关)?
  • 如果响应...因请求标头而异,则使用 Vary 标头。当 URI 保持不变时,您会使用它,但通过查看 Accept-Language 请求标头(以及基于此的重定向时),结果响应会有所不同。
  • 谢谢,所以我需要在 URL 始终相同时设置它(以便 example.com 为西班牙语和法语用户显示不同的内容)。还有当我将用户重定向到example.com/es 或根据他们的语言(我的情况)的其他网址时?
  • vary 标头告诉用户代理:当指定的标头更改时,您将获得不同的响应。 Vary: Accept-Language 会告诉用户代理使用不同的语言请求会在同一个 URI 上产生不同的结果。
  • 是的,我明白这一点,但是当每种语言的 url 不同时我不需要它? (example.com/enexample.com/es
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2015-01-13
  • 1970-01-01
相关资源
最近更新 更多