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
Объект опций
| Свойство | Тип | Необязательно | По умолчанию | Описание |
|---|---|---|---|---|
locales | string | string[] | ✓ | ['en'] | Локаль(локали), используемая для форматирования |
variables | FormatVariables | ✓ | {} | Объект с переменными для интерполяции |
Возвращает
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
Насколько полезно это руководство?