Intl.NumberFormat 在节点和浏览器中的不同行为

2024-01-26

如果我在浏览器和节点中运行此代码,我会得到两个不同的结果:

const moneyFormatter = new Intl.NumberFormat('it-IT', {
    style: 'currency',
    currency: 'EUR',
    minimumFractionDigits: 2
});

moneyFormatter.format(1);

浏览器:1,00 €

Node: €1.00


ICU 和节点

这个问题是由于缺少ICU http://site.icu-project.org/默认 Node 构建中的数据。

Nodejs 文档很好地解释了国际化功能的工作原理 https://nodejs.org/api/intl.html:

Node.js(及其底层 V8 引擎)使用 ICU 在本机 C/C++ 代码中实现这些功能。然而,其中一些需要非常大的 ICU 数据文件才能支持世界上所有区域设置。

同时,它解释了默认 Node 构建中的限制:

由于预计大多数 Node.js 用户将仅使用 ICU 功能的一小部分,因此 Node.js 默认情况下仅提供完整 ICU 数据集的子集。

And so:

在构建或运行 Node.js 时,提供了多个选项用于自定义和扩展 ICU 数据集。

快速解决方案

安装full-icunpm 包,你就完成了:每个语言环境都将被安装并在你的代码中可用。只需使用指向 icu 数据集安装路径的专用环境变量启动您的应用程序即可:

NODE_ICU_DATA=node_modules/full-icu node YOURAPP.js

或者,使用特定的 Node 选项:

node --icu-data-dir=node_modules/full-icu YOURAPP.js

该解决方案的唯一缺点是完整 icu 数据集所需的空间:~27Mb。

缓慢但空间优化的解决方案

从源代码编译节点仅与特定 ICU 捆绑 https://github.com/nodejs/node/blob/master/BUILDING.md#build-with-a-specific-icu.

检查可用的区域设置

Intl.NumberFormat.supportedLocalesOf('it')

它返回一个空数组[]如果不支持区域设置。 它返回一个带有区域设置 id 的数组['it']如果支持区域设置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Intl.NumberFormat 在节点和浏览器中的不同行为 的相关文章

随机推荐

  • TS 2540:无法分配给样式,因为它是只读属性

    我正在创建一个textarea我的 TSX 标记中的元素 以及Vim 中的 TS 类型检查器 https github com neoclide coc nvim抱怨2540 Cannot assign to style because i
  • 仅第一个媒体查询工作

    使用媒体查询时 似乎只有第一组有效 我不知道为什么 如果我交换它们 那么仍然只有第一个有效 我尝试过从最大宽度更改为最小宽度 我尝试删除 and 条件 我尝试删除所有 Javascript 我尝试删除所有 CSS 只保留带有 body di
  • PowerShell Unicode 字符意外转换

    我有一个程序 它使用一些哈希表来解析信息 我遇到了一些关于外国字符的奇怪问题 下面是准确的表述 Props P1 Norte Americano e Ingl s Expressions E1 Props P1 Expressions E1
  • 什么是 Linux 本地定时器中断?

    一切都在标题中 欢迎任何优秀文档的链接 本地定时器中断是在 APIC 上实现的定时器 它仅中断特定的 CPU 而不是引发可由任何 CPU 处理的中断 Bovet 和 Cesati 的 Understanding the Linux Kern
  • 在 C# 中将 string.Empty 转换为(通用)T?

    我有一个实用方法 它从旧的返回强类型值 INI配置类型文件 带有签名 internal static T GetIniSetting
  • 使用 Google 登录,仅允许组织域帐户

    我正在尝试创建一个只能通过 Google 登录才能访问且只能使用 GSuite 组织域 的 Web 应用程序 我希望这样做 而不需要事先初始化允许哪些域 这意味着它允许在 Google 下注册的所有电子邮件地址 但不允许 gmail com
  • 发布到 azure 后,与 MVC4 捆绑不起作用

    您好 我正在尝试为我的应用程序捆绑我的脚本 我的调试正在工作 如果我使用 Web debug 发布 一切都会正常 但是当我使用 Web releases 发布时 我的脚本不会加载 一切都在本地运行 只有当我从 VS2012 发布到 Azur
  • Swift 3 - Firebase 推送通知,我该怎么办?

    我确实喜欢下面的 Swift 2 但它在 Swift 3 中不起作用 我该如何提供这个 如果有人解释一下那就太好了 didFinishLaunchingWithOptions let notificationSettings UIUserN
  • 如何使用ANTLR生成的语法文件?

    我认为这是一个愚蠢的问题 但我刚刚开始使用 ANTLR 我将他们教程中的 SimpleCalc 语法放在一起 并以 C 作为目标语言生成它 我得到了 SimpleCalcParser c h 和 SimpleCalcLexer c h 作为
  • 正则表达式:懒惰更糟糕吗?

    我一直这样写正则表达式 a href target blank lt a 但我刚刚了解到这个懒惰的事 http www regular expressions info examples html我可以这样写 a href target b
  • Python无法访问字典

    Getting TypeError string indices must be integers当尝试访问 python 中的字典时 我尝试过使用json loads r2 这产生了 TypeError the JSON object m
  • 如何使用getCropAndSetWallpaperIntent?

    我尝试使用 getCropAndSetWallpaperIntent 方法 但出现错误 这是我的代码 Uri uri Uri parse content getFilesDir image path ContentResolver cont
  • Angular 8 嵌套拖放

    不幸的是我找不到常见问题的解决方案 这是代码的链接https stackblitz com edit angular ygwaxs https stackblitz com edit angular ygwaxs 我有这样的场景 从服务器我
  • 简单的 Javascript 碰撞检测?

    我正在尝试使用 jquery javascript html 和 css 制作一个简单的游戏 我一直陷入碰撞检测 code var map 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
  • 在 Sequel 中使用 UTC?

    我不想将时间存储在我当地的时区 但续集让我变得非常困难 我可以在将它们放在那里之前将它们设置为 UTC 有点痛苦 但是当我将它们取出时 它会假设它们是本地日期 然后它们都是未来的 8 小时 这是还没有实施的事情吗 如果是这样 有什么解决方法
  • UISearchBarSearchField 背景视图颜色

    I am trying to change the background color of the search bar text field and i have searched and tried lots of solutions
  • 流星模板中包含的谷歌地图被渲染两次

    我有以下模板
  • 设置 Visual Studio 代码以使用 R - “win32 无法使用 R”

    我正在尝试设置 R 以使用 Visual Studio 代码 当我用按键执行一行时CTRL ENTER我收到错误 win32 无法使用 R 我遵循本文中提出的建议中等职位 https medium com analytics vidhya
  • 如何设置phpmyadmin的用户名和密码[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何设置phpmyadmin的用户名和密码 我正在为 localhost 使用 xampp 软件 并且我想锁定我的 phpmyadmin 页面 当我打
  • Intl.NumberFormat 在节点和浏览器中的不同行为

    如果我在浏览器和节点中运行此代码 我会得到两个不同的结果 const moneyFormatter new Intl NumberFormat it IT style currency currency EUR minimumFractio