我需要一种根据用户的区域设置自动格式化Date和Number对象的方法。
到目前为止,我一直在使用toLocaleString()
函数作为日期。对于数字,toLocaleString()
也可用,但正如您在我准备的jsFiddle中所看到的,浏览器之间的结果差别很大。在我的Windows机器上使用英语(美国)语言环境,我得到了这个:
在Chrome中,似乎toLocaleString()
根本不适用于数字。除了这种方法,我也尝试过:
localeFormat()
功能,但无论我在PC上设置哪个区域设置(使用“区域和语言”对话框),日期和数字仍然以美国格式编码。 因此,总结一下:如何自动设置数字和日期格式以尊重用户浏览网页的区域设置,以适用于所有主流浏览器(IE,Firefox,Chrome)的方式?
答案 0 :(得分:8)
.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的说法支持。