【问题标题】:Browser language from PHP or from Javascript?浏览器语言来自 PHP 还是来自 Javascript?
【发布时间】:2013-04-26 18:43:24
【问题描述】:

我正在开发一个支持多种语言的 Web 应用程序,并且我在问自己哪个应该是检查浏览器语言的最佳层(如果我可以这样命名的话)。

我应该在 PHP 上使用 $_SERVER["HTTP_ACCEPT_LANGUAGE"] 进行检查,还是在 Javascript 中使用 navigator.language 进行检查会更好?

堆垛机,为什么?

【问题讨论】:

  • 无论你选择什么,我都会将其设为默认语言,我总是让用户在事后更改语言。
  • 我当然在做,但我只需要设置一种语言就可以开始看到页面,我认为如果我从用户的浏览器中选择它会非常接近。

标签: php javascript internationalization


【解决方案1】:

实际上它们都会捕获浏览器中设置的语言。主要区别在于$_SERVER 按优先顺序支持多种语言,而navigator.language 只能选择浏览器喜欢的第一种语言。

另一个区别是,一个是在客户端使用 JavaScript 捕获的,另一个是在服务器端使用 HTTP 标头捕获的。公平地说(即使标头可以被欺骗)在服务器端捕获值更稳定。

在 Firefox 中使用 tools->options->content->language。如果我将语言设置为Chinese

然后,当我发出请求并检查 HTTP 标头时,它会说:

Accept-Language: zh,en-us;q=0.7,en;q=0.3 //zh是两个字母的中文表示

$_SERVER["HTTP_ACCEPT_LANGUAGE"] 会给我zh,en-us;q=0.7,en;q=0.3

navigator.language 只会给我zh

所以在标题中您可以看到您可以按顺序支持多种语言选项。因此,如果由于某种原因无法呈现中文,您可以检查首选的第二语言。

如果你使用navigator.language,你不能这样做..

【讨论】:

  • 我在发布答案之前就这样做了:) 我有一个美国英语安装。并且没有任何更改alert(navigator.language) 将显示en。现在,如果我使用我提到的步骤在浏览器中将Chinese 设置为我的语言并将其移动到语言顺序的顶部,那么alert(navigator.language) 将显示zh。你也可以试试,因为很明显你也不相信我:)
  • 我刚刚删除了我尴尬的 cmets。我被MDN 误导了,而且我的测试很差。我的借口! (澄清一下:从 Gecko 5.0(Firefox 5.0 / Thunderbird 5.0 / SeaMonkey 2.2)开始,该属性的值基于 Accept-Language HTTP 标头的值。
【解决方案2】:

您应该使用$_SERVER["HTTP_ACCEPT_LANGUAGE"]。请注意,这是首选语言的加权列表,您应该相应地使用它(即不要只将第一种语言从列表中删除)

navigator.language 不会告诉您浏览器中设置的首选语言,而是浏览器应用程序本身的实际语言。

编辑:通过快速测试,navigator.language 在 Firefox 中返回首选语言,在 Opera 和 Chrome 中返回浏览器语言,在 IE 中没有任何内容。

【讨论】:

  • 关于navigator.language,显然不是这样的。在大多数现代浏览器中,它从 Accept-Language HTTP 标头中获取值。即使您的浏览器是英文的,它也可以返回fr
  • @Álvaro G. Vicario:您想到了哪些最现代的浏览器?实际上,它在大多数浏览器中的工作方式似乎有所不同(FF 中的用户语言,Chrome 和 Opera 中的浏览器语言,IE 中没有)......但无论如何,这里重要的是 HTTP_ACCEPT_LANGUAGE 是一个 列表 首选语言,而navigator.language 最多只返回其中一种。
  • MDN article 谈论 Chrome 0.3.154+ 和 Firefox 5.0+; IE 不支持它,并且没有关于 Opera 和 Safari 中确切行为的详细信息。当然,正确解析 HTTP_ACCEPT_LANGUAGE 是正确的方法,正如您已经声明的那样。
猜你喜欢
  • 2013-08-06
  • 2015-02-16
  • 2017-09-29
  • 2013-12-11
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2013-04-12
  • 2011-11-06
相关资源
最近更新 更多