Javascript 为什么带选项的Intl.NumberFormat会输出左边的欧元符号,而文档说它应该在右边?

Javascript 为什么带选项的Intl.NumberFormat会输出左边的欧元符号,而文档说它应该在右边?,javascript,internationalization,currency,Javascript,Internationalization,Currency,文档中的示例: var number = 123456.789; // request a currency format console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number)); // → 123.456,79 € 我在节点10中的输出: > new Intl.NumberFormat('de-DE', { style: 'currency'

文档中的示例:

var number = 123456.789;

// request a currency format
console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// → 123.456,79 €

我在节点10中的输出:

> new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(123456.789)
'€ 123,456.79' 

文档右侧的欧元符号。在左边,当我实际运行代码时。我需要设置区域设置还是什么?我在美国。但我实际上要求的是
de
格式,似乎这应该覆盖我的区域设置。运行示例中的精确代码没有任何区别

您的节点很可能没有对Intl的完整语言环境支持,只有英语(
small-icu

请尝试“检查对非英语语言环境的支持”部分


解决方案(如果您有
小型icu
,最可能的病例)

  • 当然,您可以重新编译(正如上面链接的页面所建议的那样)

  • 但是您可以使用快捷方式,它可能会起作用并节省一些时间

    • 启动节点并使用
      process.versions.icu
      (在我的例子中是节点
      v10.15.3
      '62.1'
    • 下载匹配的ICU源(包含数据文件)
      URL类似于
      /icu4c-
      -src.tgz.
      就我而言
    • 解包ICU源并找到ICU数据文件。在我的例子中,数据文件位于
      icu/source/data/In/icudt62l.dat
      。但在其他ICU版本中,位置可能不同(尽管我怀疑,这并非不可能:-)
    • NODE\u ICU\u DATA
      设置为指向日期文件。
      export NODE\u ICU\u DATA=/icudt62l.dat
      (定义变量)或
      env NODE\u ICU\u DATA=/icudt62l.dat NODE
      (定义+运行节点)
      您可能希望将数据文件移动到更“稳定”的位置,并删除源

  • Node没有提供可供下载的完整ICU支持版本,这一点非常糟糕。
    或者至少归档了与节点版本匹配的ICU数据文件,这样我们就不必进行所有的挖掘