Браузер intl.NumberFormat неправильно отображает символы валюты

Я пытаюсь написать функцию форматирования валюты, используя Intl.NumberFormat. Он работает правильно, когда я передаю ему такие вещи, как доллары США или евро в качестве валюты, но, кажется, ломается, когда я передаю ему более неясные коды валют, такие как PLN или COL, и вместо отображения их символов по запросу он отображает коды. Он явно распознает код, потому что, когда я прошу его отобразить имя, он работает правильно:

Intl.NumberFormat("en-US",{
  style:'currency',
  minimumIntegerDigits:1,
  currency: 'PLN',
  currencyDisplay: 'symbol'
}).format(43);

Отображает "PLN43" во время

Intl.NumberFormat("en-US",{
  style:'currency',
  minimumIntegerDigits:1,
  currency: 'PLN',
  currencyDisplay: 'name'
}).format(43);

Отображает «43,00 польских злотых»


person Gabe O'Leary    schedule 12.05.2016    source источник
comment
Нет доступа для первой проверки, но что произойдет, если вы укажете pl-PL в качестве первого параметра в приведенных выше примерах?   -  person    schedule 26.07.2017


Ответы (2)


Intl.NumberFormat должен иметь нужные вам символы, вам просто нужно убедиться, что вы указали правильный код языка.

Сопоставление языковых кодов ISO можно найти здесь: https://www.w3schools.com/tags/ref_language_codes.asp

В этом случае вам нужно будет использовать польское значение «pl» вместо «en-US».

Intl.NumberFormat("pl",{
  style:'currency',
  minimumIntegerDigits:1,
  currency: 'PLN',
  currencyDisplay: 'symbol'
}).format(43);
person NicoleMoore    schedule 30.09.2019
comment
Это означает, что мы должны изменить формат числа, чтобы использовать символ. Если мы хотим отобразить несколько непонятных валют с символами, форматирование будет несовместимым... [['pl', 'PLN'], ['th', 'THB']].map(([locale, currency]) => new Intl.NumberFormat(locale, { style: 'currency', currency, currencyDisplay: 'symbol' }).format(10000)) дает ["10 000,00 zł", "฿10,000.00"] - person DLight; 07.08.2020

Согласно спецификации:

Однако набор комбинаций кода валюты и языкового тега, для которых доступны локализованные символы валюты, зависит от реализации. Если локализованный символ валюты недоступен, для форматирования используется код валюты ISO 4217.

person Роман Парадеев    schedule 12.05.2016
comment
Что значит не доступен...? Могу ли я где-нибудь внести символы валюты для этих кодов ISO, чтобы я мог продолжать использовать этот форматтер, или мне придется придумать альтернативное решение? - person Gabe O'Leary; 13.05.2016
comment
Я мог бы предложить доступные символы, присутствующие в юникоде. - person Роман Парадеев; 13.05.2016