GT ClassMethodsFormatting

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

СвойствоТипНеобязательноеОписание
localesstring | string[]Локаль(локали) для форматирования (переопределяет значения по умолчанию у экземпляра)
variablesFormatVariablesОбъект с переменными для интерполяции сообщений

Тип 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

Насколько полезно это руководство?

formatMessage