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

i18next загружает файлы перевода, выбирает сообщение на языке пользователя, определяет формы множественного числа, интерполирует значения и форматирует числа и даты с помощью `Intl`. Библиотека доступна в npm с 2012 года, а вместе с `react-i18next` и `next-i18next` стала популярным выбором для приложений на React и Next.js. Но переводить i18next не умеет: каждое сообщение на каждом языке предоставляете вы, ваши переводчики или сервис вроде Locize, который [развивают создатели i18next](https://www.i18next.com/). Библиотеки General Translation выполняют тот же рендеринг, но General Translation вдобавок создаёт переводы на основе текстов в ваших компонентах.

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

* **Распространённость.** Это один из самых популярных i18n-фреймворков для JavaScript.
* **Широкий охват.** [Есть привязки для React, Vue, Angular, Svelte и других фреймворков](https://www.i18next.com/overview/supported-frameworks), а плагины позволяют загружать файлы по HTTP, определять язык пользователя и переводить сообщения на ICU MessageFormat с помощью `i18next-icu`.
* **Полная поддержка форм множественного числа и контекста.** Ключи содержат [суффиксы форм множественного числа CLDR](https://www.i18next.com/translation-function/plurals), такие как `_one`, `_few` и `_many`, которые разрешаются через `Intl.PluralRules`, а также контекстные варианты, например `friend_male`.
* **Инструменты.** Официальный [`i18next-cli`](https://github.com/i18next/i18next-cli) извлекает ключи, генерирует типы TypeScript и записывает ключи форм множественного числа для каждой локали. Его команда `status` завершается с ошибкой, если в какой-либо локали остались непереведённые ключи, поэтому CI может выявлять пропуски.
* **Серверные компоненты.** [`next-i18next` 16](https://github.com/i18next/next-i18next) добавляет серверную функцию перевода для Next.js App Router.
* **Никаких обязательных сервисов.** Каталоги — это обычные JSON-файлы, которые полностью принадлежат вам, а i18next работает с любым сервисом перевода или вовсе без него.

## Что i18next оставляет на вас

Вот небольшой пример почтового ящика на react-i18next. Каждой строке назначается ключ, а каждой форме множественного числа — свой отдельный ключ:

```json title="locales/en/translation.json"
{
  "inbox": {
    "title": "Inbox",
    "unread_one": "You have {{count}} unread message.",
    "unread_other": "You have {{count}} unread messages."
  }
}
```

```tsx title="Inbox.tsx"
import { useTranslation } from 'react-i18next';

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

Во всех остальных языках нужны те же ключи сообщений — с теми формами множественного числа, которые есть в этом языке: например, для польского нужны `unread_one`, `unread_few`, `unread_many` и `unread_other`. Если в польском файле есть только формы `_one` и `_other`, как в английском, а [резервным языком](https://www.i18next.com/principles/fallback) у вас указан английский, то для таких значений, как 2 и 5, будет показан английский текст:

```text title="Output"
pl, count 1:  Masz 1 nieprzeczytaną wiadomość.
pl, count 2:  You have 2 unread messages.
pl, count 5:  You have 5 unread messages.
pl, count 22: You have 22 unread messages.
```

Команда `i18next-cli status`, запущенная в CI, выявляет отсутствующие формы. Сервисы перевода могут генерировать содержимое каталога, однако ваше приложение по-прежнему обращается к ключам вроде `inbox.unread`, а рабочий процесс извлечения и перевода поддерживает эти каталоги в актуальном состоянии.

## General Translation хранит тексты прямо в коде и генерирует переводы

Библиотеки General Translation выполняют ту же работу, что и i18next. Они выбирают сообщения для каждой локали, применяют её правила множественного числа, интерполируют переменные и форматируют числа, валюты и даты с помощью [`<Num>`](/docs/react/reference/components/num), [`<Currency>`](/docs/react/reference/components/currency) и [`<DateTime>`](/docs/react/reference/components/datetime). Командам, которые предпочитают ключи, доступны словари через [`useTranslations`](/docs/react/reference/hooks/use-translations). Но General Translation делает и то, чего не умеет i18next: генерирует переводы. Вот тот же почтовый ящик на `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 и записывает перевод для каждой целевой локали. Обобщённые исходные ветви `singular` и `plural` задают формулировки для всех форм, которые нужны каждому языку перевода. Затем [`<Plural>`](/docs/react/reference/components/plural) выбирает переведённую ветвь по правилам соответствующей локали. Значение, обёрнутое в [`<Var>`](/docs/react/reference/components/var), никогда не отправляется в API.

Если вы отредактируете предложение внутри [`<T>`](/docs/react/reference/components/t), при следующем запуске перевода оно обновится для каждого языка, а переводы неизменённого содержимого будут использованы повторно. Рецензенты работают в [Редакторе переводов на панели управления](/docs/platform/dashboard/guides/reviewing-translations), поэтому для правки переводов не нужно изменять компоненты.

JavaScript-библиотеки распространяются по лицензии MIT и работают без учётной записи, если вы предоставляете переводы сами. Приложение, настроенное на загрузку всех переводов из бандла, не обращается к General Translation во время выполнения. В основе `gt-react` и `gt-next` нет никакой другой библиотеки интернационализации.

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

## Сравнение i18next и General Translation

| Возможность                | i18next                                                                           | General Translation                                                                                                                      |
| -------------------------- | --------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| Как пишется текст          | Ключи в JSON-файлах для каждого языка и пространства имён                         | JSX внутри [`<T>`](/docs/react/reference/components/t), строки через [`useGT`](/docs/react/reference/hooks/use-gt) или словари с ключами |
| Переводит ваш контент      | Нет                                                                               | Да, с помощью [`npx gt translate`](/docs/cli/reference/commands/translate)                                                               |
| Откуда берутся переводы    | Их готовите вы, переводчики или сервис вроде Locize                               | Генерируются с учётом контекста вашего кода или пишутся вашей командой                                                                   |
| Формы множественного числа | Отдельный ключ для каждой формы CLDR, заполняемый для каждого языка               | Ветви [`<Plural>`](/docs/react/reference/components/plural), которые переводятся вместе с остальным блоком                               |
| Контекст перевода          | Исходные сообщения и контекст, которые предоставляет ваш рабочий процесс перевода | Структура внутри размеченных JSX-блоков, заметки с контекстом, а также общие Glossary и пользовательские промпты                         |
| Фреймворки                 | React, Next.js и привязки для Vue, Angular, Svelte и других                       | React, Next.js, Vue, Node.js и [дополнительные SDK](/docs/overview/get-started)                                                          |
| Нужна ли учётная запись    | Нет                                                                               | Для библиотек — нет; перевод выполняется через проект General Translation                                                                |

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

## Оставьте i18next, а перевод доверьте General Translation

Переходить на другую библиотеку не нужно. CLI `gt` находит `i18next` в вашем `package.json` и сохраняет его синтаксис интерполяции. Вот конфигурация для перевода приведённого выше каталога входящих сообщений на немецкий:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de"],
  "files": {
    "json": {
      "include": ["locales/[locale]/translation.json"]
    }
  }
}
```

В английском и немецком языках используется одинаковая структура ключей множественного числа `_one` и `_other`. Эта конфигурация генерирует `locales/de/translation.json` на основе `locales/en/translation.json`. Чтобы добавить контекст для отдельных ключей — например, указать, где отображается строка, — используйте [метаданные, привязанные к ключам](/docs/cli/reference/keyed-metadata). Перед запуском [`npx gt translate`](/docs/cli/reference/commands/translate) для нового текста выполните [`npx gt upload`](/docs/cli/reference/commands/upload), чтобы импортировать исходные тексты и существующие переводы.

Если же вы хотите перейти на [`<T>`](/docs/react/reference/components/t), воспользуйтесь руководством [Миграция с библиотек интернационализации](/docs/react/guides/migrating-i18n-libraries). В нём описано, как заменить поиск по ключу встроенным текстом, сохранить словари с помощью [`useTranslations`](/docs/react/reference/hooks/use-translations) и использовать обе библиотеки параллельно, переводя маршруты по одному. (Сравнение i18next с другими библиотеками см. в статье [General Translation vs. i18next, react-intl и next-intl](/kb/general-translation-vs-i18n-libraries).)

## Как работать с польским и другими языками со сложными формами множественного числа в i18next?

Для каждого языка нужен отдельный ключ под каждую форму множественного числа по CLDR, которая в нем используется, — например, `_one`, `_few`, `_many` и `_other` для польского. Чтобы выявлять отсутствующие формы, запускайте `i18next-cli status` в CI. Если вы пишете текст непосредственно в коде с General Translation, достаточно указать ветви `singular` и `plural`, как показано выше, а сервис перевода сам сгенерирует нужные формы для языка перевода. Во время выполнения [`<Plural>`](/docs/react/reference/components/plural) выбирает подходящую форму.

## Другие альтернативы i18next

Команды, уходящие с i18next, также рассматривают следующие библиотеки:

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

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

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

## 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 ещё и выполняет перевод, используя ваш код как контекст.
- [Альтернативы 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 или Lingui: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-lingui.mdx): Выбирайте General Translation, если хотите, как и в Lingui, держать тексты прямо в коде и генерировать переводы, используя структуру JSX в качестве контекста. Lingui извлекает встроенные сообщения в каталоги, которые затем переводят ваши переводчики или подключённый сервис. CLI 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 и уже сложившийся рабочий процесс с каталогами.
- [Как работать с формами множественного числа в 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: [Альтернативы Google Translate: General Translation и Google Translate](https://generaltranslation.com/ru/kb/general-translation-vs-google-translate.mdx)
- Next question: [Альтернативы Lokalise: General Translation или Lokalise](https://generaltranslation.com/ru/kb/general-translation-vs-lokalise.mdx)

## Sitemap

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