# 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 генерирует остальные языки с учётом контекста вашего кода.

## Video

The video is narrated in English, with English captions.

[General Translation vs. Intlayer: which should you use?](https://caxecubb9c64cezv.public.blob.vercel-storage.com/films/kb-general-translation-vs-intlayer.mp4) (42 с)

General Translation keeps copy inline in your components in one language and generates the other languages with the context of your code, while Intlayer keeps every language side by side in typed declaration files and fills gaps with an AI provider you configure. Write copy once inside a `<T>` component, run `npx gt translate` before the build, and review in the Dashboard while Locadex handles updates.

## Сильные стороны 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 от General Translation обеспечивают i18n для React и Next.js без ключей перевода и без отдельного JSON-файла для каждого языка, который приходится поддерживать. Тексты остаются встроенными в JSX внутри компонента `<T>`, а команда gt translate генерирует переводы для каждого языка во время сборки, учитывая контекст из вашего кода. Locadex может поддерживать их в актуальном состоянии через пул-реквесты.
- [Как работать с формами множественного числа в React?](https://generaltranslation.com/ru/kb/how-to-handle-plurals-in-react.mdx): Чтобы работать с формами множественного числа в React, задайте для каждого языка по одному предложению на каждую форму множественного числа и выбирайте нужное по правилам множественного числа этого языка — ведь в английском 2 формы, в русском 4, а в арабском 6. Компонент `<Plural>` от General Translation в gt-react и gt-next принимает формы на исходном языке, а General Translation генерирует формы, нужные каждому языку перевода.
- [General Translation или TMS (Crowdin, Lokalise, Phrase)](https://generaltranslation.com/ru/kb/general-translation-vs-tms.mdx): Выбирайте General Translation, если разработчикам нужны генерация переводов, контекст из кода и проверка, привязанные к релизам продукта. Сохраните существующие каталоги и библиотеку рендеринга или пишите встроенный JSX без ключей перевода. TMS подходит для программ, построенных вокруг языковых поставщиков, CAT-редакторов и обмена XLIFF; её интеграции могут автоматизировать передачу файлов.

## 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.
