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

Nik*_*sev 7 javascript locale internationalization

我需要一种方法来根据用户的区域设置自动格式化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)的方式?

Jon*_*Jon 9

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

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

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