在Chrome中获取浏览器语言

5

我一直在尝试让momentjs正确检测浏览器语言并本地化时间显示。(参见Moment.js的本地化检测)

但是我在获取chrome的正确区域设置时遇到了一些麻烦。

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

enter image description here

我猜测要么是我的 Chrome 设置有误(鉴于正确的语言在 navigator.languages 中,这似乎不太可能),要么选择浏览器语言的方法不太对?除了 window.navigator.userLanguage || window.navigator.language,我是否应该使用其他方式来获取语言?

en-GB 是正确的语言/区域设置,代表英国英语。 - Wobbles
编程语言完全独立于“locale”。但不要告诉W3C(万维网联盟)。 - RobG
1个回答

5

W3C草案指出:

  • navigator.language是用户的“首选语言”或“可能的语言”。这不一定与navigator.languages[0]相同。
  • navigator.languages列出了“用户首选语言,最优先的语言排在第一位”。它应该与Accept-Language头具有相同的值。

根据在VM中快速实验的结果,navigator.languages[0]可以得到最准确的结果,而navigator.language是操作系统的语言。

看起来你获取的"en-GB"是指用户的语言,而"en-NZ"则是指用户的本地设置(数字和日期/时间格式)。

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


关于“看起来你获取的'en-GB'是指用户的语言”,你知道这个值从哪里来吗?我的浏览器和操作系统似乎都没有设置为英国,它们都设置为新西兰。从你的话中听起来我应该优先使用语言而不是语言,但这听起来有点奇怪。此外,我的标头也显示为NZ Accept-Language:en-NZ,en;q=0.8 - undefined
"en" 是一种语言,"GB" 和 "NZ" 是地区。将两者合并成一个词(无论是语言、地区还是语言环境),会造成很大的混淆。在很久以前的黑暗时代,这些设置被称为“语言”和“区域偏好”。使用“语言环境”是一个相对较新的误称:它指的是一个地方,通常是一个小区域,比如一个村庄或者面积不到5平方公里的地标。 - RobG
@LukeMcGregor 由于moment.js没有en-NZ的日期格式,你可能需要自己添加(或使用en-GB)。我只是指使用“Accept-Header”的第一部分似乎最准确,而navigator.language不一定相同。@RobG 是的,严格来说,“en-US”不是一种语言,而是一种方言。因此,“color”(en-US)和“colour”(en-GB)之间存在差异。例如,C#将其称为“文化”,这是我迄今为止找到的最好描述。文化可能基于语言/翻译(GB / US)和格式(DD/MM/YYYY vs. MM/DD/YYYY)而有所不同。 - Leon Adler
嗯,我在momentjs中添加了一个变量,https://github.com/moment/moment/pull/2683,用于新西兰。但我一直在努力找到一个可靠的方法来检测浏览器中的当前文化,并告诉moment该使用什么。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接