javascript - HTTP_ACCEPT_LANGUAGE 与 Linux 中 Firefox 中的 navigator.language 不同

标签 javascript php linux firefox

我正在 Linux 的本地 Apache 2 Web 服务器中编写一些网页,我想使用 PHP 来自动识别浏览器语言。

在网页中,我正在尝试 console.log()使用 JavaScript 关于客户端首选哪种语言,我得到 2 个不同的输出:

  • JavaScript ( console.log(navigator.language); ) 返回 es-ES
  • PHP ( <?php echo $_SERVER['HTTP_ACCEPT_LANGUAGE'] ?> ) 返回 en-US,en;q=0.5

about:config , 变量 intl.accept_languages设置为 es-ES, es, en-US, en .

注意:我想获得的本地语言是西类牙语(es-ES)。

出于某种原因,Firefox 似乎没有在我的 Linux 发行版 (Linux Mint 18.1) 中正确配置,而我已经安装了所有内容(firefoxfirefox-locale-es)。

如果我在同一台计算机上尝试使用 Chromium,PHP 输出为 es-ES,es;q=0.8;q=0.6 , 这是正确的。

如果我在其他装有 Windows 的计算机上尝试使用 Firefox,或者甚至使用 Firefox for Android,PHP 输出也是正确的:es-ES,es;q=0.8;en-US,en;q=0.5 .

为什么在 Firefox for Linux 中 PHP 输出错误,如何解决?提前致谢。


编辑:这些是 HTTP header (我划掉了身份验证 header )

要求:

GET / HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://localhost/
Cookie: PHPSESSID=crucsit7is3r6hvnd88k6q2rn5
Authorization: ########
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

响应:

HTTP/1.1 200 OK
Date: Tue, 25 Jul 2017 20:39:21 GMT
Server: Apache/2.4.18 (Ubuntu)
Authentication-Info: ########
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 1301
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

最佳答案

实际上,我在想 sleep 的时候找到了一个解决方案,只是因为 Chrome 做了类似几年前的事情。

Thanks to @Pointy for trying to help anyway

所以如果有人也有这个问题,这是步骤:

  1. 在 Firefox 的配置面板中输入(about:config 在搜索栏中)。
  2. 搜索 intl.accept_languages 变量。
  3. 将您拥有的任何默认值替换为以下格式的不同语言:xx-Xx, xx,例如 de-DE, de。最重要的部分是该变量必须将其状态从“默认”更改为“用户修改”。
  4. 再次将其值替换为正确的值:您自己的值 + 默认的 Firefox 值,即 es-ES、es、en-US、en(替换 es-ES , es 与您的值分开,例如,fr-FR, fr, en-US, en)。
  5. 应该使用此配置重置 HTTP header 。

关于javascript - HTTP_ACCEPT_LANGUAGE 与 Linux 中 Firefox 中的 navigator.language 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45310476/

相关文章:

php - 如何在 wordpress 中更改链接的 Logo ?

php - Laravel队列-在特定条件下防止作业重试

javascript - SASS 输出样式通过缩小文件实现自动化

javascript - 比较javascript中的时间戳

php - 我如何使用 php 动态更改 html div 的宽度?

Java 终端失败,eclipse 工作

linux bash 意外输出 echo

linux - 如何从字符串中提取数字?

javascript:在n个循环元素之后包含在div中的列表

javascript - 包布局的填充和边距