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