Коды валют ISO 4217

В экосистеме локализации JavaScript-библиотек, включая Globalize, работа с валютами опирается на международный стандарт International Organization for Standardization 4217. Этот стандарт определяет унифицированную систему кодов для представления валют, используемую в финансовых системах, API, банковских приложениях и форматировании денежных значений.


Структура ISO 4217

Код валюты в ISO 4217 состоит из трёх символов:

  • Первые две буквы — обозначают страну по стандарту ISO 3166-1 alpha-2
  • Третья буква — обычно первая буква названия валюты

Примеры:

  • USD — United States Dollar
  • EUR — Euro
  • JPY — Japanese Yen
  • KZT — Kazakhstani Tenge

Стандарт дополняется числовым кодом валюты (numeric code), который используется в банковских системах и обеспечивает независимость от алфавита.


Основные элементы валютного описания

ISO 4217 определяет не только буквенный код, но и дополнительные характеристики:

  • Alphabetic code — трёхбуквенный идентификатор (USD, EUR)
  • Numeric code — трёхзначный цифровой код (например, 840 для USD)
  • Minor unit — количество знаков после запятой (например, 2 для USD, 0 для JPY)

Эти параметры критичны для корректного отображения и округления сумм.


Валюты и дробные единицы

Не все валюты используют одинаковое количество десятичных знаков:

  • USD → 2 знака (cents)
  • EUR → 2 знака (cent)
  • JPY → 0 знаков (yen не делится официально на сотые)
  • KWD → 3 знака (fils)

Это различие напрямую влияет на форматирование и арифметику в международных приложениях.


ISO 4217 в контексте Globalize

Библиотека Globalize использует данные Unicode CLDR (Common Locale Data Repository), где ISO 4217 коды являются основой для валютного форматирования.

В Globalize валюта обрабатывается через несколько ключевых механизмов:

  • форматирование (formatCurrency)
  • парсинг (parseCurrency)
  • локализованное отображение символов валют
  • правила округления и дробных единиц

Пример форматирования:

Globalize("en").formatCurrency(1234.56, "USD");

Результат:

$1,234.56

Связь ISO 4217 и CLDR данных

Globalize не хранит валютные данные самостоятельно. Вместо этого он использует CLDR, где ISO 4217 коды связаны с:

  • локализованными символами валют ($, €, ¥)
  • правилами отображения (символ до или после числа)
  • форматами группировки цифр
  • plural rules для словесного представления валют

Например:

  • en-US: $1,000.00
  • fr-FR: 1 000,00 €
  • ja-JP: ¥1,000

Использование ISO кодов в Globalize API

Форматирование валют

Globalize("ru").formatCurrency(2500, "EUR");

Результат:

2 500,00 €

Парсинг валютных строк

Globalize("en").parseCurrency("$1,200.50", "USD");

Возвращает числовое значение:

1200.5

Роль числовых кодов ISO

Хотя разработчики чаще используют буквенные коды, числовые ISO 4217 коды важны для:

  • банковских сообщений SWIFT
  • платёжных систем
  • межгосударственных финансовых операций
  • систем, где алфавит может быть неоднозначным

Пример:

  • USD → 840
  • EUR → 978
  • KZT → 398

Валютные символы и неоднозначность

ISO 4217 решает проблему неоднозначности символов валют:

  • $ используется для USD, CAD, AUD и других
  • ¥ может означать JPY или CNY

Поэтому Globalize всегда опирается на код валюты, а не на символ:

Globalize("en").formatCurrency(100, "CAD");

Локализация и правила отображения валют

ISO 4217 код сам по себе не содержит информации о формате отображения, но в связке с CLDR он определяет:

  • позицию символа валюты
  • разделители тысяч и дробной части
  • правила округления
  • специфические локальные форматы

Пример различий:

  • en-US → $1,000.00
  • de-DE → 1.000,00 $
  • ru-RU → 1 000,00 $

Внутреннее использование ISO 4217 в приложениях

В JavaScript-приложениях с Globalize код валюты становится ключевым идентификатором:

  • хранение в базе данных: "USD"
  • передача через API: "EUR"
  • вычисления и отображение: через форматирование Globalize

Типичная модель данных:

{
  "amount": 1999.99,
  "currency": "USD"
}

Ошибки при работе с валютами без ISO 4217

Отсутствие стандартизированного кода приводит к проблемам:

  • невозможность корректного обмена данными между системами
  • неоднозначность символов
  • ошибки округления
  • некорректная локализация

ISO 4217 устраняет эти проблемы за счёт строгой структуры идентификаторов.


Значение стандарта в экосистеме JavaScript

В современных приложениях JavaScript ISO 4217 используется как фундамент:

  • международные платежные интерфейсы
  • e-commerce системы
  • финансовые панели
  • аналитические платформы

Globalize обеспечивает высокоуровневый слой, который превращает эти коды в локализованные представления, опираясь на данные International Organization for Standardization и CLDR.