JavaScript如何检测默认语言环境?

时间:2017-09-10 23:47:12

标签: javascript locale

今天,2017年9月11日,JavaScript的toLocaleDateString()方法正在为我输出9/11/2017。但我在英国,所以在这种情况下格式化是错误的。 MDN Web Docs告诉我此方法返回“默认语言环境中的格式化字符串”。

那么,JavaScript在哪里/如何检测我的默认语言环境?这个集合在哪里,或者它依赖于什么,以及(如何)我可以改变它?

编辑补充说:我在Windows 10上使用的是Firefox 55.0.3,如果这有任何区别的话。

3 个答案:

答案 0 :(得分:3)

简而言之,检测当前区域设置取决于实现,并且可能因环境而异。您的默认语言也可能取决于您用于安装浏览器的安装程序。

不那么短的版本:

遵循ECMAScript规范,conforming browsers(以及其他环境,例如Node.js)应implement localization ECMAScript Internationalization API (ECMA-402)后面的getting the default locale,其中仅列出了Deprecated and obsolete features的以下内容:

  

DefaultLocale抽象操作返回一个String值,表示主机环境当前语言环境的 [...] 语言标记。

这意味着获取默认语言环境取决于实现,并且可能因浏览器而异。这是故意的,因为它允许浏览器供应商保持他们当前的,不同的实现,以保持符合而不用大惊小怪。

虽然确实如此标准化也是很好的,但首先让每个人加入广泛的规范然后稍后解决这些小问题会更有利。

大多数现代浏览器都允许您在其偏好设置中更改当前的默认区域设置(显示的是Chrome):

Sample settings interface

答案 1 :(得分:1)

您可以将区域设置作为参数传递。请参阅以下示例:

  var date = new Date().toLocaleDateString("en-GB");

答案 2 :(得分:1)

我在Windows 10 PC上的Chrome,Firefox和Edge中检查了JavaScript日期和时间格式,结果很有趣。我的语言标签应为“ en-NZ”,我认为语言环境的行为将相应地遵循。

在这三种浏览器中,只有Edge默认情况下(可能是从OS)选择了正确的语言标签,而Chrome和Firefox都默认为en-US。 Edge还默认使用正确的区域设置。

似乎我可以通过将“高级设置”中的语言更改为en-NZ来影响Chrome中的语言环境,但是我得到的默认语言环境行为与en-GB相同。 Firefox似乎并不在乎我偏爱的语言是什么,它仅取决于语言“用于显示来自Firefox的菜单,消息和通知”的语言。唯一的英语语言选项是美国,加拿大或英国。

在Chrome和Firefox中,确保正确的语言环境行为的唯一方法似乎是在JavaScript代码中明确指定它。