如何根据用户区域设置格式化数字和日期?

时间:2012-06-26 10:59:01

标签: javascript internationalization locale

我需要一种根据用户的区域设置自动格式化Date和Number对象的方法。

到目前为止,我一直在使用toLocaleString()函数作为日期。对于数字,toLocaleString()也可用,但正如您在我准备的jsFiddle中所看到的,浏览器之间的结果差别很大。在我的Windows机器上使用英语(美国)语言环境,我得到了这个:

  • IE9:15,000.00
  • Firefox:15,000
  • Chrome:15000

在Chrome中,似乎toLocaleString()根本不适用于数字。除了这种方法,我也尝试过:

  • 要使用MicrosoftAjax.js库localeFormat()功能,但无论我在PC上设置哪个区域设置(使用“区域和语言”对话框),日期和数字仍然以美国格式编码。
  • 使用Globalize等库。虽然它们确实提供格式化功能,但它们无法自动检测用户的语言环境。

因此,总结一下:如何自动设置数字和日期格式以尊重用户浏览网页的区域设置,以适用于所有主流浏览器(IE,Firefox,Chrome)的方式?

2 个答案:

答案 0 :(得分:8)

本机Javascript对象上的

.toLocaleString()函数几乎没用,因为它不允许您指定语言环境或以其他方式控制它们的行为。

直到the ECMAScript i18n API成为现实(未来可能还有一点值得考虑)你唯一可行的选择是使用像Globalize这样的库,但是正如你所说的那样你需要检测用户首选的语言环境。

检测语言环境是另一个问题not easily solved with pure Javascript。具体来说,Accept-Language标题是恕我直言,实际上无用作区域设置检测的手段,因为绝大多数网络用户都看不到它。这就是为什么Web应用程序通常为用户提供自定义机制来选择传回服务器的语言环境,服务器此后使用此信息配置每个响应。

答案 1 :(得分:1)

今天提到的国际化API @Jon受到广泛支持。 从原始数字开始,您可以使用Number(123456).toLocaleString(),Chrome现在可以按预期返回"123,456"(对于美国语言环境)。我还没有在IE11 / Edge上测试过,但根据caniuse的说法支持。