# General Translation Knowledge Base: Альтернативы next-intl: gt-next или next-intl
URL: https://generaltranslation.com/ru/kb/next-intl-vs-gt-next.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: next-intl рендерит переводы, которые вы предоставляете в каталоге сообщений для каждого языка. gt-next тоже рендерит переводы, а General Translation, кроме того, генерирует их из текста, написанного прямо в вашем JSX. Обе библиотеки распространяются по лицензии MIT и поддерживают App Router и серверные компоненты. Если ваши каталоги next-intl уже работают, их можно оставить и переводить с помощью General Translation без миграции.
Category: Инструменты для рабочих процессов
Last updated: 2026-10-16
Authors: Jackie Chen
Published: 2026-10-16

И next-intl, и gt-next локализуют приложения на Next.js App Router, включая серверные компоненты. Разница в том, откуда берутся переводы: next-intl отображает сообщения, которые ваша команда или сервис перевода записывает в JSON-каталог для каждого языка, а gt-next хранит исходный текст прямо в JSX, и General Translation генерирует все переводы на этапе сборки.

Отсюда три варианта. Оставить next-intl и текущий процесс перевода. Оставить next-intl и поручить General Translation перевод его каталогов — без каких-либо изменений в компонентах. Или перейти на gt-next со встроенным текстом и автоматически генерируемыми переводами.

## Чем отличаются next-intl и gt-next?

| Вопрос                       | next-intl                                                                                                        | gt-next (General Translation)                                                                                                                                         |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Переводит ли он ваш контент? | Нет. Он только рендерит сообщения, которые вы предоставляете сами: от вашей команды или из сервиса вроде Crowdin | Да. [`gt translate`](/docs/cli/reference/commands/translate) генерирует переводы с учётом контекста из вашего кода, но ваша команда может написать их и сама          |
| Где хранится исходный текст? | Сообщения с ключами в JSON-каталоге; встроенное извлечение с помощью `useExtracted` пока экспериментальное       | Встроенный JSX внутри [`<T>`](/docs/react/reference/components/t) и строки через [`useGT`](/docs/react/reference/hooks/use-gt); словари с ключами тоже поддерживаются |
| Серверные компоненты?        | Да, с отдельными API для синхронных и асинхронных компонентов                                                    | Да: [`<T>`](/docs/react/reference/components/t), [`useGT`](/docs/react/reference/hooks/use-gt) и [`getGT`](/docs/react/nextjs/reference/functions/get-gt)             |
| Клиентские компоненты?       | Внутри `NextIntlClientProvider`                                                                                  | Внутри [`GTProvider`](/docs/react/reference/components/gt-provider)                                                                                                   |
| Маршрутизация по локалям     | Промежуточное ПО и маршруты с префиксом локали                                                                   | [`createNextMiddleware`](/docs/react/nextjs/app-router-middleware) с сегментом `app/[locale]`                                                                         |
| Формы множественного числа   | ICU MessageFormat в каждом каталоге                                                                              | Ветви [`<Plural>`](/docs/react/reference/components/plural), которые переводятся вместе с остальным блоком                                                            |
| Доставка переводов           | Файлы каталогов в бандле приложения                                                                              | Файлы в бандле или CDN General Translation для обновлений без повторного развёртывания                                                                                |
| Лицензия                     | MIT                                                                                                              | MIT                                                                                                                                                                   |

Источники: [настройка next-intl для App Router](https://next-intl.dev/docs/getting-started/app-router), [использование next-intl на сервере и клиенте](https://next-intl.dev/docs/environments/server-client-components), [быстрый старт gt-next](/docs/react/nextjs-quickstart).

## Как один и тот же заголовок выглядит в каждой библиотеке?

В рабочем процессе next-intl, основанном на каталогах, исходное сообщение хранится в JSON-файле:

```json
{
  "Projects": {
    "heading": "Find your next project"
  }
}
```

Компонент выбирает сообщение по пространству имён и ключу:

```tsx
import { useTranslations } from 'next-intl';

export default function ProjectHeading() {
  const t = useTranslations('Projects');
  return <h1>{t('heading')}</h1>;
}
```

С gt-next то же самое предложение остаётся прямо в компоненте:

```tsx
import { T } from 'gt-next';

export default function ProjectHeading() {
  return (
    <T>
      <h1>Find your next project</h1>
    </T>
  );
}
```

Оба фрагмента предполагают, что провайдер и конфигурация каждой библиотеки уже настроены. См. [руководство по настройке next-intl](https://next-intl.dev/docs/getting-started/app-router) и [справочник по `<T>`](/docs/react/reference/components/t).

Каталог позволяет рецензентам читать тексты отдельно от кода. Встроенные тексты позволяют рецензентам видеть каждое предложение прямо в том JSX, к которому оно относится, а General Translation — переводить его, используя эту структуру как контекст. Если формулировка всё ещё неоднозначна, можно воспользоваться пропом `context`, который [принимает `<T>` в gt-next](/docs/react/reference/components/t#context), или описаниями сообщений, которые [поддерживает экспериментальное извлечение в next-intl](https://next-intl.dev/docs/usage/extraction#descriptions).

Экспериментальный API [`useExtracted`](https://next-intl.dev/docs/usage/extraction) в next-intl также позволяет писать сообщения прямо в коде и извлекать их в каталоги. Извлечение меняет способ написания текстов, но не переводит извлечённые каталоги: их по-прежнему должна переводить ваша команда или сторонний сервис.

## Можно ли использовать General Translation, не отказываясь от next-intl?

Да. CLI `gt` распознаёт next-intl по вашему `package.json` и [переводит его JSON-каталоги](/docs/cli/guides/generating-translations), сохраняя синтаксис сообщений next-intl. Ваши компоненты, вызовы перевода и маршрутизация остаются прежними.

Чтобы попробовать, укажите в `gt.config.json` исходные и целевые каталоги, импортируйте уже имеющиеся переводы и переведите одну новую локаль. Рецензенты могут исправить результат в [Редакторе переводов на панели управления](/docs/platform/dashboard/guides/reviewing-translations). Если же они правят загруженные каталоги прямо в репозитории, выполните [`gt save-local`](/docs/cli/reference/commands/save-local) перед следующим запуском перевода, чтобы их правки не потерялись.

Если позже вы перейдёте на gt-next, [руководство по миграции](/docs/react/guides/migrating-i18n-libraries) расскажет, как импортировать проверенные переводы, сохранить словари и использовать обе библиотеки параллельно, мигрируя маршрут за маршрутом.

## Как каждая библиотека работает с Серверными и Клиентскими Компонентами?

Ни одна из библиотек не требует превращать страницу App Router в клиентский компонент ради локализации. Разница лишь в том, какой API вызывать в каждой среде.

| Компонент                       | next-intl                                                                                                                                                             | gt-next                                                                                                                                                           |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Синхронный серверный компонент  | [`useTranslations`](https://next-intl.dev/docs/environments/server-client-components#using-internationalization-in-server-components) с конфигурацией запроса         | [`<T>`](/docs/react/reference/components/t) для JSX; [`useGT`](/docs/react/reference/hooks/use-gt) для строк                                                      |
| Асинхронный серверный компонент | Дождитесь (`await`) [`getTranslations`](https://next-intl.dev/docs/environments/server-client-components#async-components) из `next-intl/server`                      | Дождитесь (`await`) [`getGT`](/docs/react/nextjs/reference/functions/get-gt) из `gt-next/server`, затем вызовите возвращённую функцию                             |
| Клиентский компонент            | [`useTranslations`](https://next-intl.dev/docs/environments/server-client-components#using-internationalization-in-client-components) внутри `NextIntlClientProvider` | [`<T>`](/docs/react/reference/components/t) или [`useGT`](/docs/react/reference/hooks/use-gt) внутри [`GTProvider`](/docs/react/reference/components/gt-provider) |

В обеих библиотеках интерактивные элементы управления лучше оставлять в клиентских компонентах, а остальную страницу переводить на сервере. next-intl также позволяет [передавать уже переведённые метки](https://next-intl.dev/docs/environments/server-client-components#option-1-passing-translated-labels-to-client-components) из серверного компонента в клиентский элемент управления, чтобы клиент не получал весь каталог.

## Как gt-next доставляет переводы в рабочей среде?

gt-next поддерживает два варианта доставки:

* **Включение переводов в бандл приложения** с помощью [локального загрузчика](/docs/react/guides/storing-translations). Приложение в рабочей среде читает собственные файлы перевода и не обращается к General Translation во время выполнения. Обновления попадают в приложение со следующей сборкой.
* **Загрузка переводов из CDN General Translation** с помощью [конфигурации удалённой доставки](/docs/react/nextjs/config). Опубликованные правки попадают в развёрнутое приложение без повторной сборки — с учётом его настроек версий и кеширования.

gt-next распространяется [по лицензии MIT](https://github.com/generaltranslation/gt) и выполняет рендеринг переводов из бандла без учётной записи General Translation — точно так же, как next-intl выполняет рендеринг своих каталогов.

## Какие команды используют gt-next в рабочей среде?

General Translation используют команды разработчиков Cursor, Ramp, Profound, Cognition, Sierra и ClickHouse. Profound локализует с помощью General Translation свой основной продукт — приложение на Next.js App Router. Подробнее см. [развёртывания в рабочей среде](https://generaltranslation.com/enterprise).

## Когда выбирать next-intl, а когда gt-next?

**Оставайтесь на next-intl**, если её модель каталогов подходит вашему приложению, а процесс перевода уже налажен. Если главная проблема — рутинное управление ключами, прежде чем мигрировать, попробуйте её экспериментальную функцию извлечения.

**Оставьте next-intl и добавьте General Translation**, если узкое место — подготовка переводов. CLI `gt` переводит ваши существующие каталоги, поэтому компоненты, вызовы и маршрутизация остаются прежними.

**Выбирайте gt-next**, если хотите писать тексты прямо в JSX и получать переводы при каждой сборке. Опробуйте его на одном маршруте, где используются Серверные и Клиентские Компоненты, формы множественного числа, форматированный текст и метаданные. Сохраните URL локалей этого маршрута и существующие переводы, пока замена не будет готова, и проверьте сборку для рабочей среды, прежде чем переносить другие маршруты.

Для начала воспользуйтесь [руководством по быстрому старту для Next.js App Router](/docs/react/nextjs-quickstart). Сравнение с другими библиотеками см. в статье [General Translation в сравнении с i18next, react-intl и next-intl](/kb/general-translation-vs-i18n-libraries).

## Частые вопросы

### Переводит ли next-intl мой контент?

Нет. next-intl выполняет рендеринг и форматирование сообщений из ваших каталогов. Переводы выполняет ваша команда, переводчики или специальный сервис, например [Crowdin](https://next-intl.dev/docs/workflows/localization-management). Кроме того, General Translation может переводить каталоги next-intl без миграции.

### Можно ли использовать General Translation вместе с next-intl?

Да. CLI `gt` переводит JSON-каталоги next-intl с сохранением синтаксиса сообщений next-intl, поэтому ваши компоненты и маршрутизация остаются без изменений. Подробнее см. в разделе [Генерация переводов](/docs/cli/guides/generating-translations).

### gt-next — бесплатная библиотека с открытым исходным кодом?

Да. gt-next распространяется под лицензией MIT и выполняет рендеринг переводов, включённых в бандл, без учётной записи. Информацию о генерации переводов с помощью облачного сервиса General Translation см. на странице [цен](https://generaltranslation.com/pricing).

### Поддерживает ли gt-next серверные компоненты React?

Да. В синхронных серверных компонентах используйте [`<T>`](/docs/react/reference/components/t) и [`useGT`](/docs/react/reference/hooks/use-gt), а в асинхронных — [`getGT`](/docs/react/nextjs/reference/functions/get-gt).

### Можно ли мигрировать с next-intl на gt-next постепенно, маршрут за маршрутом?

Да. В [руководстве по миграции](/docs/react/guides/migrating-i18n-libraries) описано, как использовать обе библиотеки параллельно, импортировать существующие переводы и сохранить словари с ключами там, где они вам удобнее.

## Другие альтернативы next-intl

Для приложений Next.js команды также рассматривают следующие библиотеки:

* **i18next:** выполняет рендеринг каталогов с ключами и поддерживает выбор форм множественного числа, а в связке с react-i18next и next-i18next часто используется в приложениях на React и Next.js. (См. [General Translation и i18next](/kb/general-translation-vs-i18next).)
* **react-intl:** форматирует ICU-сообщения и предлагает руководство по работе с Next.js App Router. (См. [General Translation и react-intl](/kb/general-translation-vs-react-intl).)
* **Paraglide JS:** компилирует каталоги в типизированные tree-shakable функции сообщений и предоставляет интеграцию с Next.js для сборок на webpack. (См. [General Translation и Paraglide JS](/kb/general-translation-vs-paraglide).)

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

* next-intl и gt-next поддерживают App Router, серверные компоненты и маршрутизацию по локалям, и обе библиотеки распространяются по лицензии MIT.
* next-intl выполняет рендеринг переводов, которые вы предоставляете сами. gt-next тоже выполняет их рендеринг, но General Translation ещё и генерирует их из встроенного JSX, используя ваш код в качестве контекста.
* Чтобы пользоваться General Translation, мигрировать не обязательно: `gt` CLI переводит уже существующие каталоги next-intl.
* Если всё же решите мигрировать, переносите маршруты по одному и не отключайте загрузку существующих переводов, пока не будут готовы новые.

## 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 ещё и выполняет перевод, используя ваш код как контекст.
- [Как настроить SEO для многоязычного приложения Next.js?](https://generaltranslation.com/ru/kb/multilingual-nextjs-seo.mdx): Выделите каждому языку собственный URL, задайте атрибут lang у тега html, укажите для каждой страницы канонический URL, ведущий на неё саму, добавьте альтернативные версии hreflang для всех языков, переведите заголовки и описания и перечислите все языковые версии в карте сайта.
- [Можно ли реализовать 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.

## Previous and next questions

- Previous question: [Альтернативы Lokalise: General Translation или Lokalise](https://generaltranslation.com/ru/kb/general-translation-vs-lokalise.mdx)
- Next question: [Альтернативы Phrase: General Translation или Phrase](https://generaltranslation.com/ru/kb/general-translation-vs-phrase.mdx)

## Sitemap

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