Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 浏览器语言检测:用户代理和window.navigator.language之间不一致_Javascript_Locale - Fatal编程技术网

Javascript 浏览器语言检测:用户代理和window.navigator.language之间不一致

Javascript 浏览器语言检测:用户代理和window.navigator.language之间不一致,javascript,locale,Javascript,Locale,我检测到如下浏览器语言: var language = window.navigator.userLanguage || window.navigator.language 然后通过AJAX调用将该值发送到我的Web服务器。 当我检查结果时,我看到了一件奇怪的事情。例如,浏览器的用户代理说当前区域设置是tr,但当我检查window.navigator.language时,我得到的结果是en 所有这些浏览器都说他们的语言是en: Mozilla/5.0 (Linux; U; Android 2

我检测到如下浏览器语言:

 var language = window.navigator.userLanguage || window.navigator.language
然后通过AJAX调用将该值发送到我的Web服务器。
当我检查结果时,我看到了一件奇怪的事情。例如,浏览器的用户代理说当前区域设置是
tr
,但当我检查
window.navigator.language
时,我得到的结果是
en

所有这些浏览器都说他们的语言是
en

Mozilla/5.0 (Linux; U; Android 2.2.2; tr-tr; GM FOX Build/HuaweiU8350) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1, 
Mozilla/5.0 (Linux; U; Android 2.2.2; tr-tr; LG-P503 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2
Mozilla/5.0 (Linux; U; Android 2.3.4; tr-tr; GT-S5670 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 
Mozilla/5.0 (Linux; U; Android 2.3.6; tr-tr; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S7233E/S723EJVKB1; U; Bada/1.0; tr-tr) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WQVGA SMM-MMS/1.2.0 OPN-B
Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8500/S8500JVJE6; U; Bada/1.0; tr-tr) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WVGA SMM-MMS/1.2.0 OPN-B
Mozilla/5.0 (X11; U; Linux x86_64; tr-tr) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/30.0.1599.114 Safari/537.36 Puffin/3.7.0.177AP
Mozilla/5.0 (Series40; NokiaC2-02/07.63; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/5.0.0.0.31
Mozilla/5.0 (Series40; Nokia311/07.36; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/2.3.0.0.54
Mozilla/5.0 (Series40; NokiaC3-00/08.70; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/2.3.0.0.49
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; ASU2JS; rv:11.0) like Gecko
<> P>是否应该考虑浏览器语言检测?< /P> 我的问题是检测浏览器语言。关于用户代理,当前的语言是“tr”,但
window.navigator.language
给出了“en”。这是一个已知的问题吗?我不应该信任
window.navigator.language
value吗?我应该解析语言的用户代理吗

编辑:
我还检查了这些请求的Accept language标头。这些值与请求的用户代理字符串一致。

因此,
window.navigator.language
表示“en”,
Accept language
标题是“tr-tr,en-US”,用户代理字符串有“tr-tr”字。

根据您所说的内容和您不愿意使用的情况,您应该使用
Accept language
标题,或者解析用户代理字符串(尽管Firefox不再将语言放入该字符串中)。因为您实际上可以访问HTTP头,我建议您使用它们

我对您发现的不一致性的怀疑是,浏览器可以使用一个区域设置进行编译,然后由需要不同区域设置的用户运行(考虑那些只下载默认en-US构建的用户或定期切换语言的用户)


<>你必须测试各种配置,看看对你有什么作用。考虑使用不同的测试。你也可以通过轮询你的用户(使用cookie)进行测试。随着时间的推移,也许你不需要Cookie,因为你会得到它的“正确”。默认情况下,由于这些测试,但这里或那里总是会有异常,因此允许最终用户覆盖您的(智能)默认值。

就浏览器而言,有两种相关语言:浏览器用户界面的语言和用户希望查看网页的语言。这些语言通常相同,但不一定相同。例如,挪威用户通常使用具有英语用户界面的浏览器,但更喜欢v用挪威语浏览网页

用户代理通常反映浏览器用户界面的语言。通常情况下,这种语言是固定的,只能通过大量的努力进行更改,比如重新安装浏览器(Chrome实际上允许配置浏览器语言,但即使在那里,您也必须深入了解浏览器首选项)

另一方面,所有浏览器都可以轻松配置首选内容语言。用户可以选择任意数量的语言及其优先级。该列表将在中发送,并允许服务器相应地调整内容(例如,默认情况下将用户重定向到特定语言的页面版本)

到目前为止,它是非常简单的-通常你要考虑“代码>接受语言< /代码>,而不是用户代理。唯一的复杂之处是知道哪一个代码< >窗口.Navigor。语言属性反映。最初,<代码>窗口。Navigor。语言< /代码>旨在给你浏览器的语言。的用户界面(意味着它将与用户代理匹配)。然而,网站使用它来决定向用户呈现的语言版本-因此一些浏览器转而基于

接受语言
标题生成其值(通常通过获取列表中的第一个条目).Firefox 5和更高版本的情况肯定是这样,Safari 7使用相同的逻辑(不知道它是什么时候引入的)

旁注:

  • 从Firefox32和Chrome32开始,有一个新的浏览器返回用户选择的内容首选项的完整列表
  • Internet Explorer具有非标准的

浏览器应该是…@trante您已经通过了这个:?或者甚至是这个特定的答案,您的意思是?