关于国际化语言 Intl
什么是 Intl
Intl
是一个对象,是 ECMAScript
定义的一个命名空间,内置多个属性和方法。它提供了精确的字符串对比、数字格式化、日期时间格式化等常见的功能。
属性
Intl.Collator
* 指定国际化语言的字符串比较
Intl.DateTimeFormat
* 指定国际化语言的日期和时间的比较
Intl.ListFormat
* 指定国际化语言的列表数据格式化
Intl.NumberFormat
* 指定国际化语言的数字格式化函数
Intl.PluralRules
* 启用多种敏感格式和多种语言
Intl.RelativeTimeFormat
* 指定国际化语言的相对时间格式化函数
方法
Intl.getCanonicalLocales()
返回包含规范区域语言的数组,同时会校验格式有效的区域语言代码
Intl.Collator
locales
指定使用的国际化语言,例如zh
、en
、de
、fr
等等,同时可以使用扩展键,如co
、kn
、kf
例如
常见的汉字排序,使用默认的 sort
排序,采用的是 Unicode
编码顺序,不符合汉语的排序规则,使用 new Intl.Collator('zh')
指定语言,再调用 compare
方法(因为 sort
的参数是一个函数),返回的结果符合排序的预期
常见的数字排序,使用默认的 sort
排序,是按照字符串形式的 Unicode
编码顺序,不符合数字的排序规则,使用 new Intl。Collator('en-u-kn-true')
指定扩展键 kn
为 true
, 启用数字形式,再调用 compare
完成排序,达到预期
补充一下关于扩展键的使用
扩展键使用方式 xx-u-yy-value
, xx
为国家化语言,如 zh
、cn
等, u
为固定,yy
为使用的扩展键,如 co
、kn
、kf
等,value
为扩展键的可选值,如 en-u-kn-true
中的 true
即为 kn
的可选值,表示启用 kn
co
针对的是某些地区的语言格式,可选值包括 gb2312
、pinyin
等等
kn
表示是否启用数字比较,可选值包括 true
和 false
,true
则启用;false
则不启用
kf
大写或小写优先,可选值包括 upper
、lower
和 false
,upper
则大写优先;lower
则小写优先;false
则不使用
options
options
是一个对象,属性包括 localeMatcher
、usage
、sensitivity
、ignorePunctuation
、numeric
和 caseFirst
localeMatcher
可选值为 lookup
和 beat fit
,默认是 beat fit
。该配置项表示匹配器运行时提供的运行环境,beat fit
表示尽可能的适合当前环境;lookup
表示通过算法查找适合的环境。一般默认即可,不需要配置。(该配置项没有找到较为准确的说明,以上为个人理解,如有准确的说明资料,欢迎提供)
值得一提的是 numeric
和 caseFirst
。numeric
和 locales
中的扩展键 kn
相同,如果两者都存在,则以 numeric
为准,类似的 caseFirst
和 locales
中的 kf
相同,如果两者都存在,则以 caseFirst
为准
其它 options
属性针对的是特殊的国际化语言,不再展开,可参考 MDN
Intl.DateTimeFormat
指定国际化语言对日期和时间进行格式化
locales
指定的国际化语言,可使用扩展键 nu
、ca
等
ca
指定的是历法,如 chinese
(中国),indian
(印度历)、buddhist
(佛历)等等,nu
则是展示形式
options
options
是一个对象,包含一些配置项,如下
localeMatcher
、 timeZone
、 hour12
、 formatMatcher
、 weekday
、 era
、 year
、 month
、 day
、 hour
、 minute
、 second
、 timeZoneName
timeZone
指定使用的时区,比如常用的 UTC
、 Asia/Shanghai
、 America/New_York
等
hour12
是否采用12小时制,可选值为true 和 false
weekday
工作日的展示方式,可选值为 narrow
、 short
和 long
year
、 day
、 hour
、 minute
和 second
可选值为 numeric
和 2-digit
month
可选值为 numeric
、 2-digit
、 narrow
、 short
和 long
numeric
和 2-digit
的区别在于,当数值小于10,不满两位数时,numeric
正常展示,2-digit
用0补足十位
Intl.NumberFormat
使用国际化语言对数字进行格式化
locales
指定的国际化语言,可用的扩展键为 nu
nu
表示要使用的编号格式,如 hanidec
(中文十进制数字)
options
配置项
说明
decimal 纯数字格式
currency 货币格式
percent 百分比格式
unit 单位格式 (实验阶段)
常用的配置项有 style
、 currency
、 useGrouping
,其它配置项可查看 MDN
style
指定要使用的格式样式,默认为 decimal
currency
指定货币符号,可选值有 USD
(美元) 、 EUR
(欧元) 、 CNY
(人民币) 等等
useGrouping
是否使用分组分隔符,true 或 false
Intl.RelativeTimeFormat
指定国际化语言的相对时间格式
locales
指定的国际化语言
options
配置项包括 localMatcher
、 numeric
、 style
numeric
指定输出消息的格式,可选值包括 always
和 auto
style
指定国际化消息的长度,可选值包括 long
、 short
、 narrow
Intl.ListFormat 和 Intl.PluralRules,以及方法 Intl.getCanonicalLocales() 没有理解其应用,以后再补充
版权声明: 本文为 InfoQ 作者【西贝】的原创文章。
原文链接:【http://xie.infoq.cn/article/15b78bc10e3fcfcbb5b3a9b0b】。文章转载请联系作者。
评论