# General Translation Platform: formatMessage
URL: https://generaltranslation.com/ru/docs/platform/core/reference/utility-functions/formatting/format-message.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Форматируйте сообщения в формате ICU без экземпляра GT. Справочник API для formatMessage.

[`formatMessage`](/docs/platform/core/reference/gt-class-methods/formatting/format-message) — это отдельная вспомогательная функция из библиотеки Core от General Translation, которая форматирует сообщения с подстановкой переменных и с учетом локали. Она поддерживает шаблоны ICU MessageFormat, поэтому это основной инструмент для интерполяции переменных и плюрализации.

## Обзор [#overview]

Импортируйте `formatMessage` напрямую из `generaltranslation` и вызовите его, передав строку сообщения и объект параметров. Для этого не требуется API-ключ или экземпляр [GT](/docs/platform/core/reference/gt-class/constructor). Если вам нужно форматирование через экземпляр с наследованием его локали, используйте вместо этого метод [`formatMessage`](/docs/platform/core/reference/gt-class-methods/formatting/format-message) экземпляра [`GT`](/docs/platform/core/reference/gt-class/constructor).

Он использует встроенный ICU-форматтер General Translation, который поддерживает форматирование чисел, дат, формы множественного числа и конструкции `select`.

```typescript
import { formatMessage } from 'generaltranslation';

const formatted = formatMessage('Hello {name}, you have {count} messages', {
  locales: ['en'],
  variables: { name: 'Alice', count: 5 },
});
// Возвращает: "Hello Alice, you have 5 messages"
```

Сигнатура:

```typescript
formatMessage(
  message: string,
  options?: {
    locales?: string | string[];
    variables?: FormatVariables;
    dataFormat?: 'ICU' | 'I18NEXT' | 'STRING';
  }
): string
```

## Как это работает [#how-it-works]

* **Обработка локалей.** Использует переданные `locales` для форматирования, а если они не указаны — `'en'`. Массивы образуют цепочку резервных локалей.
* **Обработка переменных.** Переменные подставляются в сообщение. Простые плейсхолдеры `{variable}` заменяются их значениями; ICU MessageFormat полностью поддерживает множественное число, выбор и форматирование.
* **Формат данных.** По умолчанию `dataFormat` имеет значение `'ICU'`. Если задано `'STRING'`, сообщение возвращается как есть, без разбора ICU.
* **Поддержка формата сообщений.** Доступны те же возможности ICU, что и у метода класса GT: форматирование чисел (`{price, number, ::currency/USD}`), форматирование дат (`{date, date, short}`), плюрализация (`{count, plural, ...}`) и выбор (`{gender, select, ...}`).
* **Без перевода.** Эта функция форматирует сообщение и подставляет значения; сам текст сообщения она не переводит. К локали адаптируются только значения переменных и вывод ICU.

## Параметры [#parameters]

| Параметр              | Описание                                                                    | Тип      | Необязательный | По умолчанию |
| --------------------- | --------------------------------------------------------------------------- | -------- | -------------- | ------------ |
| [`message`](#message) | Сообщение, которое нужно форматировать.                                     | `string` | Нет            | —            |
| [`options`](#options) | Параметры форматирования, включая целевую локаль (или локали) и переменные. | `object` | Да             | `{}`         |

### `message` [#message]

**Тип** `string` · **Обязательно**

Строка сообщения, которую нужно отформатировать. Может содержать шаблоны в формате ICU MessageFormat. Пустая строка возвращает пустую строку.

### `options` [#options]

**Тип** `object` · **Необязательно** · **По умолчанию** `{}`

Параметры форматирования:

| Свойство     | Описание                                                                    | Тип                              | Необязательно | По умолчанию |
| ------------ | --------------------------------------------------------------------------- | -------------------------------- | ------------- | ------------ |
| `locales`    | Локаль или локали, используемые для форматирования.                         | `string \| string[]`             | Да            | `'en'`       |
| `variables`  | Объект с переменными для интерполяции.                                      | `FormatVariables`                | Да            | `{}`         |
| `dataFormat` | Формат сообщения. Если указано `'STRING'`, сообщение возвращается как есть. | `'ICU' \| 'I18NEXT' \| 'STRING'` | Да            | `'ICU'`      |

## Возвращает [#returns]

**Тип** `string`

Отформатированное сообщение с подставленными переменными и применённым форматированием, зависящим от локали.

## Примеры [#examples]

```typescript
import { formatMessage } from 'generaltranslation';

// Базовое использование
const greeting = formatMessage('Hello {name}!', {
  locales: ['en'],
  variables: { name: 'World' },
});
console.log(greeting); // "Hello World!"
```

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

const notification = quickFormat(
  'You have {count, plural, =0 {no messages} =1 {one message} other {# messages}}',
  { count: 3 },
  'en'
);
console.log(notification); // "You have 3 messages"
```

```typescript
// Форматирование валюты и чисел

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

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

```typescript
import { formatMessage } from 'generaltranslation';

// Переиспользуемые шаблоны сообщений
class MessageTemplates {
  private locale: string;

  constructor(locale: string = 'en') {
    this.locale = locale;
  }

  welcome(name: string) {
    return formatMessage('Welcome back, {name}!', {
      locales: [this.locale],
      variables: { name },
    });
  }

  itemCount(count: number) {
    return formatMessage(
      '{count, plural, =0 {No items} =1 {One item} other {# items}}',
      {
        locales: [this.locale],
        variables: { count },
      }
    );
  }
}

const templates = new MessageTemplates('fr');
// Примечание: formatMessage не переводит текст — только правила ICU plural/format
// зависят от локали, поэтому исходный английский текст возвращается без изменений.
console.log(templates.welcome('Marie')); // "Welcome back, Marie!"
console.log(templates.itemCount(5)); // "5 items"
```

## Заметки [#notes]

* Для локалей, отличных от локали по умолчанию, нужно явно указать локаль в `options`; иначе используется `'en'`.
* Поддерживает те же возможности ICU MessageFormat, что и метод класса GT.
* Для пустых входных шаблонов возвращает пустую строку.
* Переменные обрабатываются по правилам форматирования ICU; если переменная указана, но не передана, возникает ошибка `MISSING_VALUE`.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
