Криптовалюты

Базовый объект Intl в JavaScript представляет собой стандартный интерфейс для локализации данных, включающий форматирование чисел, дат, времени, строк и языковых правил, зависящих от конкретной локали. Он реализуется в рамках спецификации ECMA-402 и тесно интегрирован с движком JavaScript, предоставляя единый способ работы с интернационализацией без необходимости сторонних библиотек.

Ключевая идея заключается в разделении данных и их представления. Значение остаётся неизменным, а отображение адаптируется под локаль, учитывая региональные особенности, правила языка и культурные стандарты.


Каждый механизм внутри Intl опирается на понятие локали — строки, определяющей язык и регион:

  • ru-RU — русский язык, Россия
  • en-US — английский язык, США
  • de-DE — немецкий язык, Германия

Локаль влияет на:

  • формат чисел (разделители, группировка)
  • отображение дат
  • склонение форм
  • порядок слов в списках

Объекты Intl используют единый принцип: конструктор принимает локаль и набор параметров, возвращая специализированный форматтер.


Intl.NumberFormat и работа с числами

Intl.NumberFormat отвечает за локализованное представление чисел, включая валюты, проценты и единицы измерения.

Базовое форматирование чисел

const formatter = new Intl.NumberFormat('ru-RU');
formatter.format(1234567.89);
// "1 234 567,89"

Различия между локалями проявляются в:

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

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

Intl поддерживает валютные представления через параметр style: "currency".

const usd = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'USD'
});

usd.format(1234.5);
// "$1,234.50"

Для европейских локалей формат изменяется:

const eur = new Intl.NumberFormat('de-DE', {
  style: 'currency',
  currency: 'EUR'
});

eur.format(1234.5);
// "1.234,50 €"

Использование в криптовалютных обозначениях

В некоторых реализациях ECMAScript допускается использование нестандартных валютных кодов, включая криптовалютные тикеры. Поддержка зависит от окружения, поэтому поведение может отличаться.

const btc = new Intl.NumberFormat('en-US', {
  style: 'currency',
  currency: 'BTC',
  maximumFractionDigits: 8
});

btc.format(0.01234567);

В контексте криптовалют важны особенности:

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

Аналогично можно использовать другие коды вроде ETH в средах, где они поддерживаются.


Проценты и нормализация значений

const percent = new Intl.NumberFormat('ru-RU', {
  style: 'percent'
});

percent.format(0.256);
// "26 %"

Важно, что входное значение интерпретируется как доля единицы.


Intl.DateTimeFormat и работа с датами

Intl.DateTimeFormat формирует локализованное отображение дат и времени.

const dt = new Intl.DateTimeFormat('ru-RU');
dt.format(new Date());
// "27.05.2026"

Гибкая настройка компонентов даты

const detailed = new Intl.DateTimeFormat('en-GB', {
  year: 'numeric',
  month: 'long',
  day: '2-digit',
  hour: '2-digit',
  minute: '2-digit'
});

detailed.format(new Date());
// "27 May 2026, 14:35"

Поддерживаются уровни:

  • numeric
  • 2-digit
  • long
  • short
  • narrow

Часовые пояса

const tz = new Intl.DateTimeFormat('en-US', {
  timeZone: 'UTC',
  hour: '2-digit',
  minute: '2-digit'
});

Часовой пояс влияет на интерпретацию времени без изменения исходного объекта Date.


Intl.Collator и сортировка строк

Intl.Collator используется для корректной сортировки строк в зависимости от языка.

const collator = new Intl.Collator('ru');

['яблоко', 'Ёж', 'арбуз'].sort(collator.compare);

Особенности:

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

Параметры:

const collator = new Intl.Collator('en', {
  sensitivity: 'base'
});

sensitivity управляет тем, учитываются ли:

  • регистр
  • ударения
  • базовые символы

Intl.ListFormat и форматирование списков

Позволяет формировать естественные списки в зависимости от языка.

const lf = new Intl.ListFormat('ru', {
  style: 'long',
  type: 'conjunction'
});

lf.format(['HTML', 'CSS', 'JavaScript']);
// "HTML, CSS и JavaScript"

Типы:

  • conjunction — перечисление с «и»
  • disjunction — «или»
  • unit — единицы измерения

Intl.RelativeTimeFormat и относительное время

Используется для выражений вроде «2 дня назад» или «через 5 минут».

const rtf = new Intl.RelativeTimeFormat('ru');

rtf.format(-2, 'day');
// "2 дня назад"

rtf.format(3, 'hour');
// "через 3 часа"

Поддерживаемые единицы:

  • second
  • minute
  • hour
  • day
  • week
  • month
  • year

Intl.PluralRules и формы множественного числа

Позволяет корректно определять форму слова в зависимости от числа.

const pr = new Intl.PluralRules('ru');

pr.select(1); // "one"
pr.select(2); // "few"
pr.select(5); // "many"

Используется совместно с собственными словарями склонений.


Intl.DisplayNames и названия сущностей

Позволяет получать локализованные названия языков, стран, валют.

const dn = new Intl.DisplayNames('ru', { type: 'region' });

dn.of('US');
// "Соединённые Штаты"

Поддерживаемые типы:

  • language
  • region
  • currency
  • script

Композиция Intl в прикладных сценариях

В реальных системах форматирование редко ограничивается одним объектом. Чаще используется комбинация:

  • NumberFormat для чисел и валют
  • DateTimeFormat для временных меток
  • RelativeTimeFormat для UI-таймлайнов
  • Collator для сортировки списков
  • ListFormat для генерации текстов интерфейса

Особенности производительности

Создание форматтеров — дорогостоящая операция. Поэтому важна переиспользуемость:

const formatter = new Intl.NumberFormat('ru-RU');

function format(value) {
  return formatter.format(value);
}

Ключевые принципы:

  • создание один раз
  • повторное использование
  • кэширование по локалям

Локализация и нестабильные значения окружения

Поведение Intl зависит от:

  • версии движка JavaScript
  • операционной системы
  • ICU-библиотек

Это особенно заметно в:

  • поддержке валютных кодов
  • форматах дат
  • списках языков

Работа с множественными локалями

const formatter = new Intl.NumberFormat(['fr-FR', 'en-US']);

Система выбирает первую поддерживаемую локаль.


Форматирование в сложных интерфейсах

В прикладной разработке Intl часто используется в связке с данными реального времени:

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

При работе с высокочастотными данными (например, курсами цифровых активов) важны:

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

Ограничения и поведение по умолчанию

Несмотря на широкие возможности, Intl имеет ограничения:

  • не выполняет вычисления
  • не хранит состояние данных
  • зависит от окружения
  • не гарантирует идентичный вывод на всех платформах

Он решает только задачу представления, оставляя бизнес-логику приложению.