首页 > 网站 > 建站经验 > 正文

Jav-aScript面对国际化编程时的一些建议

2019-11-02 15:46:15
字体:
来源:转载
供稿:网友

   这篇文章主要介绍了JavaScript面对国际化编程时的一些建议,包括时区与语言编码等一些值得注意的问题,需要的朋友可以参考下

  什么是国际化?

  国际化(Internationalization的缩写是i18n——i,中间18个字符,n)是将软件处理的能让来自各种地方使用各种语言的用户更简单使用的一个过程。假定某个用户来自某个地方说某种语言,他可能不经意间就得到一些错误提示。尤其是你甚至都没有做这种假设。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 function formatDate(d) { // Everyone uses month/date/year...right? var month = d.getMonth() + 1; var date = d.getDate(); var year = d.getFullYear(); return month + "/" + date + "/" + year; }   function formatMoney(amount) { // All money is dollars with two fractional digits...right? return "$" + amount.toFixed(2); }   function sortNames(names) { function sortAlphabetically(a, b) { var left = a.toLowerCase(), right = b.toLowerCase(); if (left > right) return 1; if (left === right) return 0; return -1; }   // Names always sort alphabetically...right? names.sort(sortAlphabetically); }

  JavaScript过去的i18n支持太糟糕

  传统JS的i18n程序使用toLocaleString()方法进行格式化。结果字符串包含实现自身提供的所有细节:没有办法自己选择(你确实需要那种date格式的weekday吗?year是无关紧要的吗?)。即使包含对应的细节,格式也可能是错的,比如本期望是百分比但得到的是数字。而且你还不能选择一个区域设置(locale)。

  对于排序,JS提供了基本没用的基于区域设置(locale-sensitive)的文本比较函数。localeCompare()确实存在,但是其接口根本不适合sort。而且还不允许选择区域设置,或者排序方式。

  这些限制太糟了(当我认识到时,我非常吃惊!),因为需要i18n支持(通常是金融站点用于显示货币)的严谨web应用会把数据打包,发给服务器,服务器进行操作,然后发回客户端。数据往返服务器仅仅为了处理货币的数量。Yeesh。

  新的JS国际化API

  新的ECMAScript国际化API大大提升了JS的i18n能力。 它提供了大家所能想到的格式化date、数字,文本排序的方式。区域设置是可选的,如果请求的区域设置不支持可以回退。格式化请求可以指定具体要包含的组件。支持自定义的百分比、有效数字、货币格式。开放了大量排序选项用于文本排序。如果你关心性能,首要的操作是选择一个区域设置,然后处理选项参数,现在这个操作只会处理一次,而不是之前每次区域设置相关的操作执行时都会被执行一遍。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表