JavaScript国际化API
JavaScript国际化API包括3个类:Intl.NumberFormat、Intl.DateTimeFormat和Intl.Collator。这3个类允许我们以合适当地的方式格式化数值(包括货币数量和百分数)、日期和实践,以及以适合当地的方式比较字符串。这些类并不是ECMAScript标准定义的,而是ECMA402标准定义的,而且得到了浏览器的普遍支持。Node也支持Intl API,但在写作本书时,预构建版Node二进制文件中并未包含除US English地区之外的国际化API以来的本地化数据。因此要在Node中使用这些类,可能需要单独下载数据包或者使用自定义构建的Node版本。
国际化的一个重点是显示以及翻译为用户语言的文本。实现这个目标有多种方式,但是下面介绍的Intl API并未涉及其中任何一种方式。
# 格式化数值
世界各地的用户对数值格式的预期是不同的。小数点可能是句点,也可能是逗号。千分位分隔符可能是逗号,也可能是句点,而且并不是所有地区都是3个数字一组。某些地区的货币要以百为单位分隔,有些则以千为单位,还有的不需要分隔。最后,虽然所谓的阿拉伯数字0到9在很多语言中使用,但其实也不是普适的,某些国家的用户期待看到以自己的文字书写的数字。
Intl.NumberFormat类定义了一个format()方法,考虑到了上述所有格式化的可能性。这个构造函数接收两个参数,第一个参数指定作为数值格式化依据的地区,第二个参数是用于指定格式化细节的对象。如果第一个参数被省略,或者传入的是undefined,则使用系统设置中的地区。如果第一个参数是字符串,那它指定就是期望地区,例如“en-US”(美国英语)和“fr”(法语)。第一个参数也可以是一个地区字符串数组,此时Intl.NumberFormat会选择支持最好的一个。
如果指定Intl.NumberFormat()构造函数的第二个参数,则该函数应该是一个对象,且包含一个或多个下列属性。
style
指定必须的数值格式类型。默认为“decimal”,如果指定“percent”则按百分比格式化数值,指定“currency”则表示数值为货币数量。
currency
如果style的值为“currency”,则这个属性是必需的,用于指定3个字母的ISO货币代码(如“USD”表示美元,“GBP”表示英镑)。
标签: JavaScript 国际化