formatMessage
Справка по API: метод GT formatMessage
Обзор
Метод formatMessage форматирует сообщения с подстановкой переменных и с учётом локали.
Он построен на библиотеке Format.JS intl-messageformat и поддерживает шаблоны формата сообщений ICU.
Этот метод необходим для интерполяции переменных и согласования множественного числа. Также поддерживается форматирование чисел и дат, а также другие возможности.
const gt = new GT({
sourceLocale: 'en',
targetLocale: 'fr'
});
const formatted = gt.formatMessage('Hello {name}, you have {count} messages', {
variables: { name: 'Alice', count: 5 }
});
// Возвращает: "Hello Alice, you have 5 messages"Справочные материалы
Параметры
Prop
Type
Объект Options
| Свойство | Тип | Необязательное | Описание |
|---|---|---|---|
locales | string | string[] | ✓ | Локаль(локали) для форматирования (переопределяет значения по умолчанию у экземпляра) |
variables | FormatVariables | ✓ | Объект с переменными для интерполяции сообщений |
Тип FormatVariables
type FormatVariables = {
[key: string]: string | number | Date | boolean;
};Возвращает
string — отформатированную строку с подставленными переменными и применённым форматированием, зависящим от локали.
Поведение
Подстановка переменных
- Простые переменные:
{variableName}→ заменяются строковым значением - ICU‑шаблоны:
{count, plural, ...}→ обрабатываются по правилам форматирования ICU - Отсутствующие переменные: приводят к ошибке
- Двойные фигурные скобки: отключают специальное поведение и выводятся как одна фигурная скобка
Поддержка формата сообщений
- Простая интерполяция:
{variable} - Форматирование чисел:
{price, number, ::currency/USD},{discount, number, percent},{num, number, integer} - Форматирование дат:
{date, date, short},{time, time, short} - Множественное число (plural):
{count, plural, =0 {none} =1 {one} other {many}} - Выбор (select):
{gender, select, male {he} female {she} other {they}} - Порядковые числительные (selectordinal):
{place, selectordinal, =1 {#st} =2 {#nd} =3 {#rd} other {#th}}
Примеры
Базовая подстановка переменных
const gt = new GT({ targetLocale: 'en' });
const message = gt.formatMessage('Добро пожаловать, {name}!', {
variables: { name: 'John' }
});
console.log(message); // "Добро пожаловать, John!"Плюрализация с использованием формата ICU
const message = gt.formatMessage(
'В вашей корзине {count, plural, =0 {нет товаров} one {# товар} few {# товара} many {# товаров} other {# товара}}',
{
variables: { count: 3 }
}
);
console.log(message); // "В вашей корзине 3 товара"Форматирование чисел и валюты
const gt = new GT({ targetLocale: 'en' });
const message = gt.formatMessage(
'Итого к оплате {price, number, ::currency/USD} со скидкой {discount, number, percent}',
{
variables: {
price: 99.99,
discount: 0.15
}
}
);
console.log(message); // "Итого к оплате $99.99 со скидкой 15%"Сложные шаблоны сообщений
const orderStatusMessage = gt.formatMessage(`
Обновление статуса заказа №{orderId}:
- Товары: {itemCount, plural, =0 {нет товаров} =1 {один товар} other {# товаров}}
- Итого: {total, number, ::currency/USD}
- Статус: {status, select,
pending {В ожидании}
shipped {Отправлен}
delivered {Доставлен}
other {Неизвестно}}
- Доставка: {deliveryDate, date, short}
`, {
variables: {
orderId: 'ORD-12345',
itemCount: 3,
total: 149.97,
status: 'shipped',
deliveryDate: new Date('2024-03-20')
}
});Примечания
- Метод обрабатывает синтаксис ICU-сообщений для расширенного форматирования с помощью
Intl.MessageFormatиз Format.JS. - Отсутствующие переменные приводят к ошибке.
- Локализованное форматирование чисел, дат и валют применяется автоматически.
Дальнейшие шаги
- Ознакомьтесь с документацией по
Intl.MessageFormatдля дополнительных возможностей - Форматируйте числа с помощью formatNum
Насколько полезно это руководство?