2015-10-18 95 views
2

我一直试图让momentjs正确检测浏览器语言并本地化时间显示。 (按照Locale detection with Moment.js在Chrome中检索浏览器语言

但我一直在使用chrome获取正确的语言环境时遇到了一些问题。

看起来好像chrome在navigator.languages中为我的浏览器配置了正确的语言列表,但navigator.language正在返回完全不同的内容。

enter image description here

我猜任我有镀铬设置错误(这似乎不太可能给出正确的语言都在navigator.languages)或选择浏览器的语言是不完全正确的方法是什么?

我应该用不同的方式获得除window.navigator.userLanguage || window.navigator.language以外的语言吗?

+0

zh-CN是适当的语言/语言环境,它代表英国英国。 – Wobbles

+0

语言完全独立于“语言环境”。但不要告诉W3C。 – RobG

回答

4

W3C draft指出:

  • navigator.language是用户的 “首选语言” 或"plausible language"。这不一定与navigator.languages[0]相同。
  • navigator.languages列出了“用户的首选语言,首选语言最优先”。预计与Accept-Language标题具有相同的值。

通过的在虚拟机快速试验的长相,navigator.languages[0]导致最准确的结果,navigator.language作为OS的语言。

它看起来好像"en-GB"你得到是指语言的用户的,而"en-NZ"是指用户区域(数&日期/时间格式)。

由于这仍然是一份草稿,因此您得到的结果可能随实施而变化。

+0

关于'它看起来好像你所获得的'en-GB'是指用户的语言',你知道这个价值是从哪里来的吗?我的浏览​​器或操作系统似乎都没有设置到英国,他们都被设置为新西兰。这听起来有点像我应该优先从语言中使用语言,尽管听起来有点奇怪。此外,我的标题还声明NZ'Accept-Language:en-NZ,en; q = 0.8' –

+0

“en”是一种语言,“GB”和“NZ”是区域。将两者合为一个单词(语言,地区或语言环境)会造成很大的混淆。回到黑暗时代,这种设置被称为“语言”和“区域偏好”。 “locale”的使用是一个相对较近的误称:它指的是一个地方,通常是一个小区域,如村庄或地标小于5平方公里。 – RobG

+0

@LukeMcGregor因为moment.js没有en-NZ的任何日期格式,所以你可能必须自己添加它们(或者使用en-GB)。我的意思是使用“Accept-Header”的第一部分似乎最准确,而'navigator.language'不一定相同。 @RobG是的,严格来说,“en-US”不是一种语言,而是一种方言。因此,“颜色”(en-US)和“颜色”(en-GB)之间的区别。例如,C#将这称为“文化”,这是我找到的最好的描述。文化可能因语言/翻译基础(GB/US)和格式基础(DD/MM/YYYY与MM/DD/YYYY)而异。 –