Utility FunctionsFormatting

formatMessage

Справочник по API для отдельной функции formatMessage

Обзор

Метод formatMessage форматирует сообщения с подстановкой переменных и с учетом локали. Построенный на базе библиотеки Format.JS intl-messageformat, он поддерживает шаблоны ICU MessageFormat.

Этот метод критически важен для интерполяции переменных и обработки множественного числа. Он также поддерживает форматирование чисел и дат, а также другие возможности.

import { formatMessage } from 'generaltranslation';

const formatted = formatMessage('Здравствуйте, {name}! У вас {count} сообщений.', {
  locales: ['en'],
  variables: { name: 'Alice', count: 5 }
});
// Возвращает: «Здравствуйте, Alice! У вас 5 сообщений».

Справочные материалы

Параметры

Prop

Type

Объект опций

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

Возвращает

string - Отформатированное сообщение с подставленными переменными и применённым локалеспецифичным форматированием.


Поведение

Обработка локалей

  • Использует параметр locales для форматирования
  • При отсутствии локалей по умолчанию применяет ['en']
  • Поддерживает цепочки запасных локалей (fallback) с помощью массивов

Обработка переменных

  • Простая подстановка: {variable} → заменяется на значение
  • Формат ICU: полная поддержка множественного числа, выборок (select) и форматирования
  • Отсутствующие переменные: оставляются без изменений в результате

Поддержка форматов сообщений

Те же возможности форматов сообщений ICU, что и у метода класса GT:

  • Форматирование чисел: {price, number, currency}
  • Форматирование дат: {date, date, short}
  • Множественное число: {count, plural, ...}
  • Выбор значения: {gender, select, ...}

Примеры

Базовое использование

import { formatMessage } from 'generaltranslation';

const greeting = formatMessage('Привет, {name}!', {
  locales: ['ru'],
  variables: { name: 'Мир' }
});
console.log(greeting); // "Привет, Мир!"

Без экземпляра GT

// Вспомогательная функция для форматирования без создания экземпляра класса
function quickFormat(template: string, variables: any, locale = 'en') {
  return formatMessage(template, {
    locales: [locale],
    variables
  });
}

const notification = quickFormat(
  'У вас {count, plural, =0 {нет сообщений} =1 {одно сообщение} other {# сообщений}}',
  { count: 3 },
  'ru'
);
console.log(notification); // "У вас 3 сообщения"

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

// Форматирование для немецкой локали
const germanPrice = formatMessage('Preis: {price, number, currency}', {
  locales: ['de'],
  variables: { price: 1234.56 }
});
console.log(germanPrice); // "Preis: 1.234,56 €"

// Форматирование процентов
const progress = formatMessage('Прогресс: {percent, number, percent}', {
  locales: ['en'],
  variables: { percent: 0.85 }
});
console.log(progress); // "Прогресс: 85%"

Библиотека шаблонов

import { formatMessage } from 'generaltranslation';

class MessageTemplates {
  private locale: string;
  
  constructor(locale: string = 'en') {
    this.locale = locale;
  }
  
  welcome(name: string) {
    return formatMessage('Рады вас видеть снова, {name}!', {
      locales: [this.locale],
      variables: { name }
    });
  }
  
  itemCount(count: number) {
    return formatMessage(
      '{count, plural, =0 {Нет элементов} =1 {Один элемент} other {# элемента}}',
      {
        locales: [this.locale],
        variables: { count }
      }
    );
  }
}

const templates = new MessageTemplates('fr');
console.log(templates.welcome('Marie')); // «Рады вас видеть снова, Marie!» (по‑французски)
console.log(templates.itemCount(5)); // «5 элементов»

Примечания

  • Требуется явное указание локали в параметрах
  • Поддерживает те же возможности формата сообщений ICU, что и метод класса GT
  • Возвращает пустую строку при пустом входном шаблоне
  • Переменные обрабатываются до применения правил форматирования ICU

Дальнейшие шаги

  • Ознакомьтесь с документацией по Intl.MessageFormat для получения дополнительных возможностей
  • Используйте метод класса GT formatMessage для форматирования с сохранением состояния
  • Форматируйте числа с помощью отдельной функции formatNum
  • Узнайте больше о типе FormatVariables

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

formatMessage