7

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

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

  • IE9:15,000.00
  • 火狐:15,000
  • 铬:15000

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

  • 要使用 MicrosoftAjax.js 库localeFormat()函数,但无论我在 PC 上设置了哪种语言环境(通过使用“区域和语言”对话框),日期和数字仍然都是美国格式。
  • 使用像Globalize这样的库。尽管它们确实提供了格式化功能,但它们无法自动检测用户的语言环境。

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

4

2 回答 2

10

.toLocaleString()原生 Javascript 对象上的函数实际上是无用的,因为它不允许您指定语言环境或以其他方式控制它们的行为。

ECMAScript i18n API成为现实之前(这在未来可能太远了,现在根本不值得考虑),您唯一实用的选择是使用诸如 Globalize 之类的库,但是正如您所说,您需要检测用户的首选语言环境.

检测语言环境是另一个用纯 Javascript 不容易解决的问题。具体来说,在Accept-Language恕我直言,标头作为区域设置检测的手段实际上是无用的,因为它对绝大多数 Web 用户不可见。这就是为什么 Web 应用程序通常为用户提供一种自定义机制来选择返回给服务器的区域设置,并且服务器使用此信息来配置此后的每个响应。

于 2012-06-26T11:07:52.383 回答
2

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

于 2017-06-22T08:17:23.047 回答