В экосистеме FormatJS ключевую роль играет единообразие представления
локализованных данных: чисел, дат, валют, процентов, текста с
переменными и вложенной разметкой. Стиль вывода определяется сочетанием
механизмов ICU Message Syntax, параметров форматирования и расширений
поверх стандартного Intl API. Гибкость достигается за счёт
разделения логики сообщений и их визуального представления.
FormatJS опирается на нативный Intl API, предоставляемый
средой выполнения JavaScript. Это означает, что базовые стили вывода
зависят от конфигурации форматтеров:
Intl.NumberFormatIntl.DateTimeFormatIntl.RelativeTimeFormatIntl.PluralRulesКаждый из них принимает объект опций, который определяет внешний вид результата.
Пример влияния настроек:
FormatJS использует эти возможности, расширяя их через единый слой сообщений.
Основной инструмент стилизации текста — ICU Message Format,
используемый в intl-messageformat.
Сообщение может включать переменные, селекторы и вложенные структуры:
{count, plural,
one {# элемент}
few {# элемента}
many {# элементов}
}
Стиль вывода здесь определяется не только переводом, но и грамматическими правилами локали.
Ключевые элементы влияния на стиль:
plural — формы множественного числаselect — выбор варианта строкиselectordinal — порядковые числительныеЛокаль определяет не только язык, но и визуальную структуру представления данных:
Пример:
ru-RU:
1 234,56
12.05.2026
en-US:
1,234.56
05/12/2026
FormatJS автоматически применяет правила, связанные с выбранной локалью, через провайдеры и контекст.
В React-экосистеме FormatJS наиболее часто используется
react-intl. Основные инструменты стилизации:
FormattedMessageFormattedNumberFormattedDateFormattedTimeКаждый компонент принимает набор параметров, влияющих на внешний вид вывода.
<FormattedMessage
id="cart.items"
values={{ count: 5 }}
/>
Стиль результата зависит от ICU-правил внутри сообщения.
<FormattedNumber
value={12345.678}
style="currency"
currency="USD"
/>
Возможные стили:
decimalcurrencypercentunitКаждый стиль изменяет способ отображения числа, включая символы, округление и локальные правила.
<FormattedDate
value={Date.now()}
year="numeric"
month="long"
day="2-digit"
/>
Стиль задаётся через комбинацию параметров:
yearmonthdayhourminutesecondТакже применяются preset-стили:
shortmediumlongfullFormatJS позволяет задавать глобальные форматы, влияющие на единообразие стиля во всём приложении.
<IntlProvider
locale="ru"
defaultFormats={{
number: {
currency: {
style: 'currency',
currency: 'RUB',
minimumFractionDigits: 2
}
}
}}
>
Такой подход фиксирует стиль отображения без необходимости повторного указания параметров.
defineMessages используется для структурирования
сообщений и их стиля:
const messages = defineMessages({
price: {
id: 'product.price',
defaultMessage: '{value, number, currency}'
}
});
Здесь стиль числа встроен непосредственно в ICU-синтаксис, что делает форматирование частью текстового шаблона.
FormatJS поддерживает вложенную разметку через функции в
values, позволяя управлять визуальным стилем фрагментов
текста.
<FormattedMessage
id="terms"
values={{
b: chunks => <strong>{chunks}</strong>,
link: chunks => <a href="/terms">{chunks}</a>
}}
/>
ICU-шаблон:
<b>Важно</b>: согласие с <link>условиями</link>
Такой механизм отделяет структуру сообщения от HTML/React-реализации, сохраняя единообразный стиль.
FormatJS допускает создание кастомных форматтеров через API
IntlProvider.
<IntlProvider
locale="ru"
formats={{
number: {
compact: {
notation: 'compact',
compactDisplay: 'short'
}
}
}}
>
Это позволяет стандартизировать стиль сокращённых чисел:
Стиль числового вывода часто определяется параметрами округления:
minimumFractionDigitsmaximumFractionDigitsroundingModeПример влияния:
1.2345 → 1.23 (фиксированная точность)
1.239 → 1.24 (округление)
В FormatJS эти параметры передаются через
FormattedNumber или Intl.NumberFormat.
Финансовый формат требует строгой стандартизации:
<FormattedNumber
value={1999.99}
style="currency"
currency="EUR"
/>
Элементы стиля:
<FormattedNumber
value={0.75}
style="percent"
/>
Особенности стиля:
%Единообразие достигается через централизованную конфигурацию:
IntlProvider настройкаСтиль становится системным свойством приложения, а не локальной настройкой отдельных компонентов.
ICU-сообщения могут комбинировать несколько уровней форматирования:
{price, number, currency} за {count, plural, one {# товар} few {# товара} many {# товаров}}
Здесь одновременно применяются:
Вне React используется IntlMessageFormat:
const msg = new IntlMessageFormat(
'{price, number, currency} итог',
'ru'
);
msg.format({ price: 1200 });
Стиль результата определяется:
FormatJS обеспечивает предсказуемость вывода за счёт:
Стиль текста становится результатом декларативного описания, а не императивной логики.