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

Intlayer — это [библиотека интернационализации с открытым исходным кодом](https://github.com/aymericzip/intlayer), которая размещает контент в файле объявлений рядом с каждым компонентом, например `inbox.content.ts`, где все переводы каждой строки перечислены в одном вызове `t({ en, es, pl })`. Хук вроде `useIntlayer('inbox')` возвращает этот контент — типизированный и на текущей локали. Intlayer заполняет недостающие языки с помощью настроенного вами ИИ-провайдера, а также предлагает бесплатный визуальный редактор и необязательную облачную CMS. Но все языковые версии каждой строки по-прежнему хранятся в ваших исходных файлах, и писать, дополнять и проверять их приходится вам. General Translation идёт другим путём: вы пишете текст один раз, прямо в коде, на языке-источнике, а General Translation генерирует остальные языки с учётом контекста вашего кода.

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

* **Контент рядом с компонентом.** Один файл объявлений на компонент позволяет держать текст рядом с кодом, который его рендерит.
* **Типобезопасность.** Ключи `useIntlayer` типизированы: в версии 9.7.0 `useIntlayer('inbx')` вызывает ошибку TypeScript. Вызов `t()`, в котором не хватает одной из настроенных локалей, тоже помечается (в тесте на 9.7.0 это была ошибка типа, а строгость проверки задаётся через `strictMode`), поэтому пропуск обнаруживается ещё до релиза.
* **Богатые типы контента.** Помимо текста для каждой локали, декларации поддерживают [формы множественного числа по категориям CLDR](https://intlayer.org/doc/concept/content/plural) (`plural({ one, few, many, other })`), перечисления, условия, грамматический род, Markdown, HTML, вложенность и вставки.
* **Собственная модель.** `intlayer fill` переводит недостающие локали с помощью OpenAI, Anthropic, Mistral, Gemini, DeepSeek, Ollama, OpenRouter и других провайдеров, которые задаются в [`ai` в `intlayer.config.ts`](https://intlayer.org/doc/concept/configuration) или через `--provider` и `--api-key`. Если у вас есть собственный ключ и установлен пакет `@intlayer/ai`, [команда выполняется локально](https://intlayer.org/doc/concept/cli/fill), а платите вы напрямую провайдеру.
* **Визуальное редактирование.** Пакет `intlayer-editor` открывает запущенное приложение в редакторе, где авторы выбирают и правят текст, а затем записывает изменения обратно в файлы объявлений. [Согласно документации Intlayer](https://intlayer.org/doc/concept/editor), редактор распространяется под лицензией Apache 2.0, бесплатен для коммерческого использования и предназначен для разработки и staging-окружения.
* **Поддержка фреймворков.** [Руководства](https://intlayer.org/doc/get-started) есть для Next.js, React с Vite, React Router, TanStack Start, React Native, Vue и Nuxt, Svelte и SvelteKit, Solid, Preact, Astro, Angular, а также для серверных фреймворков, таких как Express, NestJS, Fastify и Hono.

## Что Intlayer перекладывает на вас

Вот файл контента для входящих сообщений с тремя локалями:

```ts title="inbox.content.ts"
import { t, plural, type Dictionary } from 'intlayer';

const inboxContent = {
  key: 'inbox',
  content: {
    title: t({
      en: 'Inbox',
      es: 'Bandeja de entrada',
      pl: 'Skrzynka odbiorcza',
    }),
    unread: t({
      en: plural({
        one: 'You have {{count}} unread message.',
        other: 'You have {{count}} unread messages.',
      }),
      es: plural({
        one: 'Tienes {{count}} mensaje sin leer.',
        other: 'Tienes {{count}} mensajes sin leer.',
      }),
      pl: plural({
        one: 'Masz {{count}} nieprzeczytaną wiadomość.',
        few: 'Masz {{count}} nieprzeczytane wiadomości.',
        many: 'Masz {{count}} nieprzeczytanych wiadomości.',
        other: 'Masz {{count}} nieprzeczytanej wiadomości.',
      }),
    }),
  },
} satisfies Dictionary;

export default inboxContent;
```

```tsx title="Inbox.tsx"
import { useIntlayer } from 'react-intlayer';

export function Inbox({ count }: { count: number }) {
  const { title, unread } = useIntlayer('inbox');
  return (
    <section>
      <h1>{title}</h1>
      <p>{unread({ count })}</p>
    </section>
  );
}
```

Такой код корректно рендерится в каждой локали, но файл разрастается с каждой новой локалью: при 20 локалях у каждой строки по 20 записей. И новой строке тоже нужны все до единой. Добавление `archive: t({ en: 'Archive' })` вызвало ошибку типов со списком ещё недостающих локалей:

```text title="Output"
Type '{ en: string; }' is missing the following properties from type
'Required<Record<keyof __RequiredLocalesRegistry, unknown>>': es, pl
```

Во время выполнения для отсутствующих локалей подставлялся английский. Чтобы восполнить пробел, нужно написать переводы самостоятельно или запустить `intlayer fill`. Fill передаёт модели содержимое словаря, [его описание](https://intlayer.org/doc/concept/content) и строку `applicationContext` из вашей конфигурации. Ни компонент, ни окружающий строку JSX модель не видит. [Компилятор Intlayer](https://intlayer.org/doc/compiler) умеет во время сборки извлекать обычный текст из JSX в файлы контента, так что писать объявления вручную необязательно, однако переводы всё равно оказываются в этих файлах.

## General Translation хранит в коде только один язык

Библиотеки General Translation выполняют рендеринг переводов точно так же: выбирают сообщения для каждой локали и применяют её правила множественного числа. Разница в том, что в ваших компонентах остаётся только язык-источник. Вот тот же почтовый ящик на `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) вместе со структурой его элементов в API General Translation и записывает переводы для каждой целевой локали в отдельные файлы, поэтому при добавлении локали меняется `gt.config.json`, а не ваши компоненты. Вы пишете только те формы множественного числа, которые есть в английском, а при переводе создаются формы, нужные каждому языку перевода. [`<Plural>`](/docs/react/reference/components/plural) выбирает переведённую ветку по правилам локали читателя. [`npx gt validate`](/docs/cli/reference/commands/validate) проверяет проект без обращения к API, а [`gt generate`](/docs/cli/reference/commands/generate) создаёт шаблоны для команд, которые переводят вручную.

Результат зависит от контекста. General Translation переводит текст и JSX-структуру внутри каждого размеченного блока целиком, а примечания разработчиков помогают уточнить смысл. Кнопка «Save» для документа по-немецки — «speichern», а в предложении сэкономить деньги — «sparen». [Контекстные группы](/docs/platform/dashboard/guides/defining-context-for-translations) применяют ваш Glossary и пользовательские промпты к назначенным проектам. Рецензенты вносят правки в панели управления, а CLI или [Locadex](/docs/platform/locadex/quickstart) обновляют переводы по мере изменения кода. Если вы хотите размечать существующий JSX автоматически, включите [автоматическое внедрение JSX](/docs/cli/guides/using-auto-jsx).

JavaScript-библиотеки распространяются по лицензии MIT и могут выполнять рендеринг готовых переводов без учётной записи. Храните переводы в своей сборке или публикуйте их в CDN General Translation.

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

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

| Возможность                    | Intlayer                                                                                                                                                            | General Translation                                                                                                                        |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| Как пишется текст              | `t({ en, es, ... })` в файле объявлений для каждого компонента, чтение через `useIntlayer`                                                                          | JSX внутри [`<T>`](/docs/react/reference/components/t), строки через [`useGT`](/docs/react/reference/hooks/use-gt) или словари с ключами   |
| Где хранятся переводы          | В файлах объявлений или в отдельных файлах контента для каждой локали                                                                                               | В отдельных файлах для каждой локали или в CDN General Translation                                                                         |
| ИИ-перевод                     | `intlayer fill` с ключом вашего провайдера или через сервис Intlayer                                                                                                | [`npx gt translate`](/docs/cli/reference/commands/translate) через API General Translation                                                 |
| Какой контекст получает модель | Содержимое словаря, описание и строка с контекстом приложения                                                                                                       | Размеченная структура JSX, примечания разработчиков, а также назначенные Glossary и пользовательские промпты                                         |
| Отсутствующие локали           | Помечаются, в тесте версии 9.7.0 — как ошибка типов; о них сообщает [`intlayer test`](https://intlayer.org/doc/concept/cli/test)                                    | Генерируются командой [`npx gt translate`](/docs/cli/reference/commands/translate); непереведённый контент отображается на языке-источнике |
| Редактирование                 | Бесплатный локальный визуальный редактор; облачная CMS по желанию                                                                                                   | Редактирование и проверка переводов в панели управления                                                                                    |
| Фреймворки                     | React, Next.js, Vue, Svelte, Solid, Angular, Astro, React Native и серверы на Node.js                                                                               | React, Next.js, Vue, Node.js и [другие SDK](/docs/overview/get-started)                                                                    |
| Лицензия и стоимость           | Apache 2.0; стоимость тарифов облачной CMS зависит от числа проектов, мест и объёма хранилища ([цены](https://app.intlayer.org/pricing), данные на октябрь 2026 г.) | JavaScript-библиотеки под лицензией MIT; [оплата перевода по факту использования](https://generaltranslation.com/pricing)                  |

Выбирайте Intlayer, если хотите видеть все языки прямо рядом с компонентом, получать ошибки типов при отсутствии локалей, дать авторам редактор прямо на странице или вам нужна интеграция со Svelte, Solid или Angular. Выбирайте General Translation, если вам удобнее писать текст один раз на языке-источнике, а переводы на все остальные языки получать автоматически — с учётом контекста вашего кода, Glossary и пользовательских промптов.

## Переход с Intlayer на General Translation

Переносите компоненты по одному: пусть каждый компонент использует переводы Intlayer, пока его версия на General Translation не будет готова. При серверном рендеринге с `react-intlayer` 9.7.0 и `gt-react` 11.4.12 компонент Intlayer и компонент [`<T>`](/docs/react/reference/components/t) корректно отображались рядом внутри `IntlayerProvider` и [`GTProvider`](/docs/react/reference/components/gt-provider). Скопируйте значения `en` компонента в JSX внутри [`<T>`](/docs/react/reference/components/t), создайте переводы с помощью [`npx gt translate`](/docs/cli/reference/commands/translate) и проверьте результат, прежде чем переключать компонент. Начните с руководства [Быстрый старт Next.js](/docs/react/nextjs-quickstart) или [Быстрый старт React](/docs/react/react-quickstart), а о том, как использовать две библиотеки одновременно во время перехода, читайте в разделе [Миграция с других библиотек интернационализации](/docs/react/guides/migrating-i18n-libraries).

## Ключевые выводы

* Intlayer хранит контент каждого компонента в типизированном файле объявлений, где все языки расположены рядом, выявляет отсутствующие локали как ошибки типов и заполняет их с помощью настроенного вами ИИ-провайдера.
* General Translation хранит в компонентах только язык-источник, а все остальные языки генерирует с учётом контекста из вашего кода, Glossary и пользовательских промптов; проверить переводы можно в панели управления.
* Intlayer поддерживает больше фреймворков и позволяет редактировать контент визуально прямо на странице. На General Translation можно переходить постепенно, по одному компоненту, поскольку обе библиотеки могут работать параллельно.

## 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 ещё и выполняет перевод, используя ваш код как контекст.
- [General Translation или Paraglide JS: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-paraglide.mdx): Выбирайте General Translation, если хотите держать тексты прямо в коде и создавать переводы с учётом структуры ваших React-компонентов, общей терминологии и проверки в панели управления. Выбирайте Paraglide JS, если вам нужны скомпилированные типизированные функции сообщений и tree-shaking на уровне отдельных сообщений. Paraglide выполняет рендеринг ваших каталогов, а General Translation связывает исходные тексты с созданием переводов и их последующим обновлением.
- [Можно ли реализовать i18n без файлов перевода?](https://generaltranslation.com/ru/kb/i18n-without-translation-files.mdx): Да. С gt-react или gt-next контент остаётся встроенным прямо в ваши компоненты внутри компонента `<T>`, а переводы генерируются во время сборки, поэтому не нужно писать ключи и JSON-файлы для каждой локали и следить за их синхронизацией.
- [Как работать с формами множественного числа в React?](https://generaltranslation.com/ru/kb/how-to-handle-plurals-in-react.mdx): Не зашивайте логику выбора формы множественного числа в код с помощью проверок вроде n === 1. Для приложений только на английском хватит небольшой вспомогательной функции, но многоязычным приложениям нужны locale-aware правила множественного числа. С ними для любого языка справляется i18n-компонент, например `<Plural>` из gt-react или gt-next.
- [Почему стоит выбрать General Translation вместо TMS (Smartling, Lokalise, Phrase, Crowdin или Transifex)?](https://generaltranslation.com/ru/kb/general-translation-vs-tms.mdx): Система управления переводами (TMS), например Smartling, Lokalise, Phrase, Crowdin или Transifex, координирует работу переводчиков, но инженерам всё равно приходится извлекать строки, отправлять их на перевод, ждать результатов и встраивать переводы обратно в продукт. General Translation переводит контент прямо в вашем коде с учётом контекста, выпускает все языки с каждым релизом и работает на библиотеках с открытым исходным кодом без привязки к поставщику.

## Previous and next questions

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

## Sitemap

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