如果我在浏览器和节点中运行此代码,我会得到两个不同的结果:
const moneyFormatter = new Intl.NumberFormat('it-IT', {
style: 'currency',
currency: 'EUR',
minimumFractionDigits: 2
});
moneyFormatter.format(1);
浏览器:1,00 €
因为:kuzxsw点
此问题是由默认节点构建中缺少€1.00
数据引起的。
ICU这个功能很好:
Node.js(及其底层V8引擎)使用ICU在本机C / C ++代码中实现这些功能。但是,其中一些需要非常大的ICU数据文件才能支持世界上所有的语言环境。
它在默认节点构建中的局限性:
由于预计大多数Node.js用户将仅使用ICU功能的一小部分,因此默认情况下Node.js仅提供完整ICU数据集的子集。
所以:
在构建或运行Node.js时,提供了几个用于自定义和扩展ICU数据集的选项。
安装Nodejs docs explain it npm软件包,您就完成了:每个语言环境都将被安装并可以使用。只需使用指向icu数据集安装的专用env var启动应用程序:
full-icu
或者,使用备用节点选项:
NODE_ICU_DATA=node_modules/full-icu node YOURAPP.js
此解决方案的唯一缺点是完整icu数据集所需的空间:~27Mb。
从源node --icu-data-dir=node_modules/full-icu YOURAPP.js
编译节点。
bundling it with only a specific ICU
如果不支持语言环境,它将返回一个空数组Intl.NumberFormat.supportedLocalesOf('it')
。如果支持语言环境,它将返回一个语言环境为[]
的数组。