# General Translation Knowledge Base: General Translation или Lingui: что выбрать?
URL: https://generaltranslation.com/ru/kb/general-translation-vs-lingui.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Выбирайте General Translation, если хотите, как и в Lingui, держать тексты прямо в коде и генерировать переводы, используя структуру JSX в качестве контекста. Lingui извлекает встроенные сообщения в каталоги, которые затем переводят ваши переводчики или подключённый сервис. CLI General Translation обновляет переводы по мере изменения кода, а ваша команда проверяет их в панели управления.
Category: Интернационализация
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

На этапе написания кода подход Lingui близок к подходу General Translation. Вы пишете `<Trans>Inbox</Trans>` в компоненте, макросы Lingui компилируют его в ICU-сообщение со сгенерированным ID, `lingui extract` записывает каталоги PO, а `lingui compile` превращает переведённые каталоги в компактные JavaScript-модули. Чего Lingui не делает, так это самого перевода: документация предлагает [редактировать каталоги вручную или синхронизировать их с Crowdin или Translation.io](https://lingui.dev/tools/introduction). General Translation тоже хранит тексты встроенными в код, но переводы генерирует сам.

## Сильные стороны Lingui

* **Встроенный исходный текст и макросы.** Макрос `<Trans>` и [макросы Lingui](https://lingui.dev/ref/macro) для форм множественного числа и обычных строк позволяют держать английский текст прямо в компоненте и компилируются в ICU MessageFormat, так что писать ключи никому не нужно.
* **Компактная среда выполнения.** Сообщения компилируются заранее, а размер среды выполнения Lingui, по собственным замерам проекта, составляет [около 2 kB](https://lingui.dev/introduction).
* **Каталоги, совместимые с Gettext.** [PO — формат по умолчанию](https://lingui.dev/ref/catalog-formats). `lingui extract` добавляет новые сообщения в каталог каждой локали и помечает удалённые как устаревшие, а поля `context` и `comment` доходят до переводчиков.
* **Серверные компоненты.** [Начиная с версии 4.10](https://lingui.dev/tutorials/react-rsc), `<Trans>` и `useLingui` работают на сервере, если каждая страница или макет вызывает `setI18n`.
* **Активная разработка.** [Версия 6 вышла в апреле 2026 года](https://lingui.dev/blog/2026/04/22/announcing-lingui-6.0) (только ESM, Node.js 22.19 или новее), лицензия — MIT.

## Что Lingui оставляет на ваше усмотрение

Вот небольшой пример почтового ящика на React-макросах Lingui:

```jsx title="Inbox.jsx"
import { Trans, Plural } from '@lingui/react/macro';

export function Inbox({ count }) {
  return (
    <section>
      <h1>
        <Trans>Inbox</Trans>
      </h1>
      <p>
        <Trans>
          You have <Plural value={count} one="# unread message" other="# unread messages" />.
        </Trans>
      </p>
    </section>
  );
}
```

`lingui extract` добавляет новые сообщения для целевого языка в PO-каталоги, оставляя переводы пустыми. Ваши переводчики или подключённый сервис заполняют эти записи, сохраняя синтаксис ICU. Вот как выглядит испанский каталог после заполнения:

```text title="locales/es/messages.po"
#: src/Inbox.jsx:7
msgid "Inbox"
msgstr "Bandeja de entrada"

#: src/Inbox.jsx:10
msgid "You have {count, plural, one {# unread message} other {# unread messages}}."
msgstr "Tienes {count, plural, one {# mensaje sin leer} other {# mensajes sin leer}}."
```

Затем [`lingui compile`](https://lingui.dev/ref/cli) превращает каталог в модуль, который загружает приложение. Цикл «извлечь, перевести, скомпилировать» повторяется при каждом изменении, макросам требуется [преобразование при сборке](https://lingui.dev/installation) (Babel-плагин Lingui, его плагин для Vite или экспериментальный плагин для SWC), а переводчик видит только запись в PO-файле и комментарии к ней, но не сам компонент.

## Пишите текст прямо в коде, а каталоги пусть создаёт General Translation

Библиотеки General Translation сохраняют тот же подход с написанием текста непосредственно в коде: текст остаётся в [`<T>`](/docs/react/reference/components/t), формы множественного числа задаются в [`<Plural>`](/docs/react/reference/components/plural), а [`<Num>`](/docs/react/reference/components/num) форматирует значения для каждой локали. А дальше General Translation делает то, чего не умеет Lingui, — генерирует переводы. Вот тот же список входящих на `gt-react`:

```tsx title="Inbox.tsx"
import { T, Plural, Num } from 'gt-react';

export function Inbox({ count }: { count: number }) {
  return (
    <T>
      <section>
        <h1>Inbox</h1>
        <Plural
          n={count}
          singular={<p>You have <Num>{count}</Num> unread message.</p>}
          plural={<p>You have <Num>{count}</Num> unread messages.</p>}
        />
      </section>
    </T>
  );
}
```

[`npx gt translate`](/docs/cli/reference/commands/translate) отправляет каждый блок [`<T>`](/docs/react/reference/components/t) вместе со структурой его элементов и генерирует целевые каталоги ещё до сборки. Исходные ветви `singular` и `plural` задают формулировки для форм, которые нужны каждому языку перевода. [`<Plural>`](/docs/react/reference/components/plural) выбирает переведённую ветвь во время выполнения. Строки вне JSX обрабатываются через [`useGT`](/docs/react/reference/hooks/use-gt) — аналог строкового макроса Lingui.

В этом примере заголовок папки «Входящие» и ветви сообщения отправляются на перевод вместе. Вы также можете добавить [заметку `context`](/docs/react/reference/components/t#context), чтобы пояснить значение, характерное для продукта. Рецензенты правят сгенерированный текст в [Редакторе переводов на панели управления](/docs/platform/dashboard/guides/reviewing-translations); при следующем запуске CLI неизменённые переводы используются повторно, а для нового текста создаются новые, причём отдельная команда компиляции каталогов не нужна.

Платформа и документация Profound доступны более чем в 47 локалях благодаря General Translation. (См. [развёртывания в рабочей среде](https://generaltranslation.com/enterprise).)

## Lingui и General Translation: краткое сравнение

| Возможность               | Lingui                                                                                       | General Translation                                                                                                   |
| ------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| Как пишется текст         | Встроенные макросы, например `<Trans>`                                                       | Встроенный JSX в [`<T>`](/docs/react/reference/components/t) и строки в [`useGT`](/docs/react/reference/hooks/use-gt) |
| Переводит ваш контент     | Нет                                                                                          | Да, с помощью [`npx gt translate`](/docs/cli/reference/commands/translate)                                            |
| Шаги при каждом изменении | Извлечение, перевод каждого PO-каталога, компиляция, плюс преобразование макросов при сборке | [`npx gt translate`](/docs/cli/reference/commands/translate) перед сборкой                                            |
| Каталоги                  | PO-файлы для каждой локали, компилируемые в JavaScript-модули                                | Генерируются для каждой локали и хранятся в вашем репозитории или в CDN General Translation                           |
| Что видит переводчик      | Сообщение, а также поля `context` и `comment`                                                | Структуру внутри размеченных JSX-блоков, заметки с контекстом, а также общие Glossary и пользовательские промпты      |

Оставайтесь на Lingui, если ваши переводчики работают с PO-каталогами gettext, если для размера бандла важна его скомпилированная минимальная среда выполнения или если ваш процесс перевода уже налажен. Выбирайте General Translation, если вам нужно то же написание текста непосредственно в коде, но без цикла извлечения, перевода и компиляции, и переводы, которые создаются с учётом контекста вашего кода.

## Переход с Lingui

Переносите компоненты или маршруты по одному. `<Trans>` из Lingui соответствует [`<T>`](/docs/react/reference/components/t), а `<Plural value={count} one="…" other="…" />` — компоненту [`<Plural>`](/docs/react/reference/components/plural) с `n={count}` и ветвями `singular` и `plural` в сочетании с [`<Num>`](/docs/react/reference/components/num) для вывода числа. Строковому макросу Lingui соответствует [`useGT`](/docs/react/reference/hooks/use-gt). Для ещё не перенесённых компонентов продолжайте загружать существующие переводы Lingui. Когда последний компонент будет перенесён, удалите преобразование макросов, а также скрипты извлечения и компиляции. (См. [Миграция с других библиотек интернационализации](/docs/react/guides/migrating-i18n-libraries).)

## Основные выводы

* Lingui хранит тексты непосредственно в коде и компилирует компактную среду выполнения; каждый целевой каталог предоставляют переводчики или подключённый сервис.
* Библиотеки General Translation сохраняют тот же подход с написанием текста непосредственно в коде, но General Translation ещё и берёт на себя перевод — с учётом контекста вашего кода и без цикла работы с каталогами.
* Макросы Lingui практически напрямую соответствуют [`<T>`](/docs/react/reference/components/t), [`<Plural>`](/docs/react/reference/components/plural) и [`useGT`](/docs/react/reference/hooks/use-gt), поэтому мигрировать можно постепенно, по одному компоненту.

## Related questions

- [General Translation против i18next, react-intl и next-intl: какую библиотеку интернационализации выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-i18n-libraries.mdx): Библиотеки с открытым исходным кодом, такие как i18next, react-intl и next-intl, ничего не переводят. Они лишь отображают переводы, которые вы сами помещаете в файл каталога для каждого языка, — их пишете вы, ваши переводчики или сторонний сервис. Библиотеки General Translation тоже имеют открытый исходный код и делают то же самое, но General Translation ещё и выполняет перевод, используя ваш код как контекст.
- [Альтернативы i18next: General Translation или i18next](https://generaltranslation.com/ru/kb/general-translation-vs-i18next.mdx): Выбирайте General Translation, если хотите хранить тексты прямо в React-компонентах и создавать переводы с учётом их JSX-структуры и контекста продукта. Можно также оставить i18next и переводить существующие каталоги с помощью General Translation. i18next отвечает за рендеринг сообщений и выбор форм множественного числа, а сами переводы предоставляет отдельный сервис.
- [Альтернативы react-intl: General Translation или react-intl](https://generaltranslation.com/ru/kb/general-translation-vs-react-intl.mdx): General Translation позволяет React-командам сохранить синтаксис ICU-сообщений и при этом получить генерацию переводов, общую терминологию и проверку в панели управления. react-intl отвечает за форматирование и предоставляет инструменты FormatJS для работы с каталогами, а General Translation ещё и создаёт сами переводы.
- [General Translation или vue-i18n: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-vue-i18n.mdx): General Translation позволяет командам Vue писать исходные тексты прямо в шаблонах и создавать переводы с помощью CLI. Плагин gt-vue выполняет рендеринг этого контента с учётом локали, включая формы множественного числа и форматирование чисел. Выбирайте его, если хотите избавиться от поддержки исходных файлов с ключами; vue-i18n по-прежнему подходит командам, которые используют модуль i18n для Nuxt и уже сложившийся рабочий процесс с каталогами.
- [Можно ли реализовать i18n без файлов перевода?](https://generaltranslation.com/ru/kb/i18n-without-translation-files.mdx): Да. С gt-react или gt-next контент остаётся встроенным прямо в ваши компоненты внутри компонента `<T>`, а переводы генерируются во время сборки, поэтому не нужно писать ключи и JSON-файлы для каждой локали и следить за их синхронизацией.

## Previous and next questions

- Previous question: [General Translation или Intlayer: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-intlayer.mdx)
- Next question: [General Translation или Locize: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-locize.mdx)

## Sitemap

See the [Knowledge Base sitemap](https://generaltranslation.com/ru/kb/sitemap.md) for every article.
