# General Translation Platform: formatMessage URL: https://generaltranslation.com/ru/docs/platform/core/reference/gt-class-methods/formatting/format-message.mdx --- title: formatMessage description: Форматируйте сообщения в стиле ICU с переменными и значениями с учетом локали. Справочник по API для formatMessage. --- Форматирует сообщение с подстановкой переменных и форматированием с учетом локали в экземпляре [GT](/docs/platform/core/reference/gt-class/constructor). General Translation использует библиотеку Format.JS [`intl-messageformat`](https://formatjs.github.io/docs/intl-messageformat/) и поддерживает шаблоны ICU MessageFormat, включая интерполяцию переменных, обработку множественного числа, форматирование чисел и дат. ## Обзор [#overview] Вызовите `formatMessage` у экземпляра [`GT`](/docs/platform/core/reference/gt-class/constructor), передав строку сообщения и необязательный объект параметров с `variables` для интерполяции. Метод возвращает отформатированное сообщение. ```typescript 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" ``` Сигнатура: ```typescript formatMessage( message: string, options?: { locales?: string | string[]; variables?: FormatVariables; dataFormat?: StringFormat; } ): string ``` *Примечание: `formatMessage` работает локально с использованием `IntlMessageFormat` (из `intl-messageformat`) и не требует API-ключа. Если передан `locales`, он переопределяет локали экземпляра. О форматировании без экземпляра `GT` см. в автономной версии [`formatMessage`](/docs/platform/core/reference/utility-functions/formatting/format-message).* ## Как это работает [#how-it-works] * **Обработка ICU.** Метод разбирает синтаксис ICU MessageFormat с помощью `IntlMessageFormat` (из `intl-messageformat`) и автоматически применяет форматирование чисел, дат и валют в соответствии с локалью. * **Определение локали.** `locales` переопределяет значения экземпляра по умолчанию для одного вызова. * **Отсутствующие переменные вызывают ошибку.** Если в сообщении есть переменная, которая не передана в `variables`, возникает ошибка. * **Экранирование фигурных скобок.** В соответствии с синтаксисом ICU заключайте фигурную скобку в одинарные кавычки (`'{'` или `'}'`), чтобы она не воспринималась как начало плейсхолдера. ### Подстановка переменных * Простые переменные: `{variableName}` заменяется строковым значением. * Шаблоны ICU: `{count, plural, ...}` обрабатываются по правилам форматирования ICU. * Отсутствующие переменные: приводят к ошибке. * Литеральные фигурные скобки: заключите их в одинарные кавычки в соответствии с синтаксисом ICU (`'{'` или `'}'`), чтобы вывести фигурную скобку как обычный символ. ### Поддержка формата сообщений * **Простая интерполяция:** `{variable}` * **Форматирование чисел:** `{price, number, ::currency/USD}`, `{discount, number, percent}`, `{num, number, integer}` * **Форматирование даты:** `{date, date, short}`, `{time, time, short}` * **Плюрализация:** `{count, plural, =0 {none} =1 {one} other {many}}` * **Выбор:** `{gender, select, male {he} female {she} other {they}}` * **Порядковые числительные:** `{place, selectordinal, =1 {#st} =2 {#nd} =3 {#rd} other {#th}}` ## Параметры [#parameters] | Параметр | Описание | Тип | Необязательный | По умолчанию | | --------------------- | ------------------------------------------------ | -------- | -------------- | ------------ | | [`message`](#message) | ICU-сообщение для форматирования. | `string` | Нет | — | | [`options`](#options) | Конфигурация форматирования, включая переменные. | `object` | Да | — | ### `message` [#message] **Тип** `string` · **Обязательно** Сообщение, которое нужно форматировать, с использованием синтаксиса ICU MessageFormat. ### `options` [#options] **Тип** `object` · **Необязательный** Конфигурация форматирования: | Имя | Описание | Тип | Необязательный | По умолчанию | | ------------ | ------------------------------------------------------------------------------------------ | -------------------- | -------------- | ----------------- | | `locales` | Локали, используемые для форматирования (переопределяют значения по умолчанию экземпляра). | `string \| string[]` | Да | локали экземпляра | | `variables` | Объект переменных для интерполяции сообщения. | `FormatVariables` | Да | `{}` | | `dataFormat` | Формат данных строки сообщения (`'ICU'`, `'I18NEXT'` или `'STRING'`). | `StringFormat` | Да | `'ICU'` | Тип `FormatVariables`: ```typescript type FormatVariables = Record; ``` ## Возвращаемое значение [#returns] **Тип** `string` Отформатированное сообщение, в котором подставлены переменные и применено форматирование с учётом локали. ## Примеры [#examples] ```typescript // Базовая подстановка переменных const gt = new GT({ targetLocale: 'en' }); const message = gt.formatMessage('Welcome {name}!', { variables: { name: 'John' }, }); console.log(message); // "Welcome John!" ``` ```typescript // Плюрализация в формате ICU const message = gt.formatMessage( 'You have {count, plural, =0 {no items} =1 {one item} other {# items}} in your cart', { variables: { count: 3 }, } ); console.log(message); // "You have 3 items in your cart" ``` ```typescript // Форматирование чисел и валюты const gt = new GT({ targetLocale: 'en' }); const message = gt.formatMessage( 'Your total is {price, number, ::currency/USD} with {discount, number, percent} off', { variables: { price: 99.99, discount: 0.15, }, } ); console.log(message); // "Your total is $99.99 with 15% off" ``` ```typescript // Сложные шаблоны сообщений const orderStatusMessage = gt.formatMessage(` Order #{orderId} status update: - Items: {itemCount, plural, =0 {no items} =1 {one item} other {# items}} - Total: {total, number, ::currency/USD} - Status: {status, select, pending {Pending} shipped {Shipped} delivered {Delivered} other {Unknown}} - Delivery: {deliveryDate, date, short} `, { variables: { orderId: 'ORD-12345', itemCount: 3, total: 149.97, status: 'shipped', deliveryDate: new Date('2024-03-20'), }, }); ``` ## Заметки [#notes] * Метод обрабатывает синтаксис ICU MessageFormat с помощью `IntlMessageFormat` (из `intl-messageformat`). * Если переменные отсутствуют, возникает ошибка. * Форматирование чисел, дат и валюты в соответствии с локалью применяется автоматически. * Чтобы форматировать отдельные числа, используйте [`formatNum`](/docs/platform/core/reference/gt-class-methods/formatting/format-num).