很遗憾,截至撰写本文时(版本为0.10),Node当前不支持ECMA-402的Intl
对象,除非您进行自定义编译,这在node.js Readme中有记录。
如果编译自定义版本的 Node 不可行或让您感到恐惧,可以使用 intl 模块 作为解决方法。这是一个 JavaScript polyfill,涵盖了大部分 EMCAScript 402 标准,但不包括With libicu i18n support:
svn checkout --force --revision 214189 \ http://src.chromium.org/svn/trunk/deps/third_party/icu46 \ deps/v8/third_party/icu46 ./configure --with-icu-path=deps/v8/third_party/icu46/icu.gyp make
make install
Intl.Collator
。有关此限制的原因,请参阅项目的 Readme 文件。npm install intl --save
然后在你的 Node 代码中:
var Intl = require('intl');
console.log(new Intl.NumberFormat("de-DE").format(12345678));
https://github.com/andyearnshaw/Intl.js
var areIntlLocalesSupported = require('intl-locales-supported');
var localesMyAppSupports = [
/* list locales here */
];
if (global.Intl) {
// Determine if the built-in `Intl` has the locale data we need.
if (!areIntlLocalesSupported(localesMyAppSupports)) {
// `Intl` exists, but it doesn't have the data we need, so load the
// polyfill and replace the constructors we need with the polyfill's.
require('intl');
Intl.NumberFormat = IntlPolyfill.NumberFormat;
Intl.DateTimeFormat = IntlPolyfill.DateTimeFormat;
}
} else {
// No `Intl`, so use and load the polyfill.
global.Intl = require('intl');
}
Intl.js不会(也永远不会)实现Intl.Collator。 对于这个,你真的需要依赖使用所需语言环境构建的Node 0.12。
https://github.com/nodejs/node/blob/master/CHANGELOG.md#2015-08-18-version-310-fishrock123
引用错误:Intl 未定义
这个错误是由于浏览器兼容性问题引起的。在这里查看相同问题。
错误发现于:移动设备、Android、MiuiBrowser 9.7.3
如果还有其他环境不在上述列表/浏览器兼容性表中,请在评论中添加。
使用 polyfill
import IntlPolyfill from "intl";
// import desired or required locale
import "intl/locale-data/jsonp/en";
import "intl/locale-data/jsonp/en-IN";
Intl
未定义,则返回Polyfill的函数。function getIntl() {
if (typeof Intl !== "undefined") {
return Intl;
}
return IntlPolyfill;
}
const CustomIntl = getIntl();
使用方法:
const number = 123456;
const enFormatted = new CustomIntl.NumberFormat("en").format(number);
console.log("enFormatted: ", enFormatted); // 123,456
const enINFormatted = new CustomIntl.NumberFormat("en-IN").format(number);
console.log("enINFormatted: ", enINFormatted); // 1,23,456
var Intl = require('Intl');
不起作用,new Intl.Collator()
也不行。 - Henrik Andersson