NumberFormat для валюты CAD не подходит - PullRequest
1 голос
/ 15 июня 2019

Я использую Intl.NumberFormat, и когда я устанавливаю валюту в CAD с английским языком, я получаю CA$5.00. Я думал, что символы будут чем-то $ or Can$ or C$ or CAD Я просто подбросил простую кодовую ручку https://codepen.io/jrock2004/pen/MMKqQq?editors=1010

const price = 5,
  locale = 'en-US',
  currency = 'CAD';

const formatter = new Intl.NumberFormat (locale, {
  style: 'currency',
  currency: currency,
});

const formattedPrice = formatter.format (price);

Я делаю что-то не так или, может быть, все в порядке? Спасибо

1 Ответ

2 голосов
/ 15 июня 2019

Javascript engine V8 использует ICU для форматирования валюты (и другой локали). И ICU использует CLDR. В cldr у нас есть список определенных альтернативных имен здесь . Поэтому, когда мы устанавливаем локаль как US (en_US), и нам нужны доллары, тогда символом является $. Но для одной и той же локали мы можем получить разные доллары, поэтому, чтобы различить ее, CDLR возвращает разные символы. То же самое будет, если вы установите для локали en_CA и для валюты CAD, тогда мы получим символ $, потому что канадцы называют канадские доллары долларами (здесь нет ничего удивительного :)) А для locale = 'en-CA', currency = 'USD' мы получили бы 1,00 долл. США .

В CLDR есть несколько альтернативных символов доллара (AUD - A $, BRL - R $ и несколько других).

Также, если мы проверим документацию для Intl.NumberFormat Параметры currencyDisplay могут быть symbol, code или name. Если вы передаете code, вы получаете CAD 1.00, а если вы передаете symbol, вы получаете CA$ 1.00.

TLDR; Js использует ICU, который использует CDLR, который возвращает CA$ для вашего случая.

...