和Datetime一样,number format也是国际化开发和测试中需要注意的一个重要组成部分。如本例所示,测试中发现表格中的数字并未跟随浏览器的语言设置而进行相应的格式转化。
这种情况下不少人都会说,这跟DateTime还有Currency问题一样啊,不就是pattern string问题么?让translator在资源文件中预定义一下格式,应该就解决了啊!呃……不得不说,这也许称得上一个临时的workaround,但绝对算不上国际化解决方案,毕竟i18n跟l10n是两个完全不同的领域,虽然他们都带个“化”。言归正传,欢迎本文的主角登场——toLocaleString方法。
该方法包含两个参数。
locales
可选,在开发国际化软件时一般需要从浏览器获得。包含一种或多种语言或区域设置标记的区域设置字符串数组。如果包含多个区域设置字符串,请以降序优先级对它们进行排列,确保首个条目为首选区域位置。如果省略此参数,则使用JavaScript 运行时的默认区域设置。
options
可选。包含一个或多个指定比较选项的特性的对象。例如显示带有货币符号的数字等。ISO4217 定义的所有货币符号以及currencycode都在这里。http://www.currency-iso.org/dam/downloads/lists/list_one.xml
示意代码如下:
<body>
<h1>G11n Demo</h1>
<script>
var loc = "zh";
var d = new Date(2016, 9, 23, 12, 34, 56);
var n = 123456.789;
var cur = {style: "currency", currency: "CNY"};
document.writeln(d.toLocaleString(loc));
document.writeln('</br>');
document.writeln(n.toLocaleString(loc));
document.writeln('</br>');
document.writeln(n.toLocaleString(loc, cur));
</script>
</body>
// var loc = 'ar';
// var loc = 'de';
23.10.2016,12:34:56
123.456,789
123.456,79 €
// var loc = 'fr';
23/10/2016à 12:34:56
123 456,789
123 456,79 €
// var loc = “fi”;
23.10.2016klo 12.34.56
123 456,789
123 456,79 €
// var loc = “ko”;
2016.10. 23. 오후 12:34:56
123,456.789
₩123,457
// var loc = “ja”;
2016/10/2312:34:56
123,456.789
¥123,457
读到这里,大家还认为我们需要在前端number format展示问题上使用pattern string么?