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

vue-i18n выполняет рендеринг сообщений на языке пользователя в приложениях Vue. Вы задаёте сообщения для каждой локали, обращаетесь к ним в шаблонах по ключу, а библиотека форматирует формы множественного числа, даты и числа. Однако сама она ничего не переводит: сообщения на всех языках предоставляете вы, ваши переводчики или система управления переводами (TMS). `gt-vue` от General Translation выполняет рендеринг переводов точно так же, но General Translation ещё и создаёт их из текста, который вы пишете прямо в шаблонах.

## Сильные стороны vue-i18n

* **Зрелость.** vue-i18n доступен в npm с 2014 года. [Версия 11 — поддерживаемая ветка](https://vue-i18n.intlify.dev/guide/maintenance), а версия 12 находится в стадии альфа-тестирования.
* **Nuxt.** [Модуль `@nuxtjs/i18n` построен на vue-i18n 11](https://i18n.nuxtjs.org/docs/getting-started) и добавляет маршруты с префиксом локали, локализованные пути, определение языка браузера, ленивую загрузку переводов и SEO-теги, например альтернативные версии hreflang.
* **Форматирование и форматированный текст.** `datetimeFormats` и `numberFormats` принимают параметры `Intl`, а [компонент `<i18n-t>`](https://vue-i18n.intlify.dev/guide/advanced/component) позволяет вставлять элементы в переведённое сообщение без `v-html`.
* **Сообщения рядом с компонентами.** Благодаря `@intlify/unplugin-vue-i18n` [блок `<i18n>`](https://vue-i18n.intlify.dev/guide/advanced/sfc) позволяет хранить сообщения компонента прямо в его однофайловом компоненте.
* **Инструменты.** [Официальный плагин ESLint](https://eslint-plugin-vue-i18n.intlify.dev/rules/) находит в шаблонах текст без перевода, а также отсутствующие и неиспользуемые ключи.

## Что vue-i18n перекладывает на вас

Вот небольшой почтовый ящик на Composition API из vue-i18n. У каждой строки есть свой ключ, а английский текст хранится в файле сообщений:

```json title="locales/en.json"
{
  "inbox": {
    "heading": "Inbox",
    "unread": "You have {n} unread message | You have {n} unread messages"
  }
}
```

```vue title="Inbox.vue"
<script setup>
import { useI18n } from 'vue-i18n'

defineProps({ count: { type: Number, required: true } })
const { t } = useI18n()
</script>

<template>
  <section>
    <h1>{{ t('inbox.heading') }}</h1>
    <p>{{ t('inbox.unread', count) }}</p>
  </section>
</template>
```

Для каждого языка перевода нужны переведённые сообщения — их предоставляет ваша команда или сервис перевода. Для нашего примера важны две детали реализации:

* **Правила множественного числа.** В vue-i18n 11 правило по умолчанию выбирает форму по её позиции. В польском языке используются категории `one`, `few`, `many` и `other`, поэтому настройте [собственную функцию `pluralRules`](https://github.com/intlify/vue-i18n/blob/master/docs/guide/v11/essentials/pluralization.md), которая сопоставляет числа с вашими переведёнными формами. В vue-i18n 12, который пока находится в стадии альфа-версии, [используется `Intl.PluralRules`](https://github.com/intlify/vue-i18n/releases/tag/v12.0.0-alpha.4).
* **Числа внутри сообщений.** `{n}` в сообщении с множественным числом не форматируется с учётом локали, поэтому на испанском 12345 отображается как «12345», а не «12.345», если вы не передадите уже отформатированное значение.

## Встроенные шаблоны со сгенерированными переводами

`gt-vue` решает ту же задачу, что и vue-i18n. Он выполняет рендеринг сообщений для каждой локали, выбирает формы множественного числа по правилам CLDR соответствующей локали и форматирует числа, валюты и даты с помощью [`<Num>`](/docs/vue/reference/components/num), [`<Currency>`](/docs/vue/reference/components/currency) и [`<DateTime>`](/docs/vue/reference/components/datetime). А затем General Translation делает то, чего не умеет vue-i18n: генерирует переводы. Вот тот же почтовый ящик, но с текстом прямо в шаблоне:

```vue title="Inbox.vue"
<script setup>
import { Num, Plural, T } from 'gt-vue'

defineProps({ count: { type: Number, required: true } })
</script>

<template>
  <section>
    <T><h1>Inbox</h1></T>
    <p>
      <T>
        <Plural :n="count">
          <template #singular>You have <Num :value="count" /> unread message</template>
          <template #plural>You have <Num :value="count" /> unread messages</template>
        </Plural>
      </T>
    </p>
  </section>
</template>
```

[`npx gt translate`](/docs/cli/reference/commands/translate) сканирует ваши шаблоны, отправляет каждый блок [`<T>`](/docs/vue/reference/components/t) вместе с его структурой в API General Translation и записывает каталог для каждой целевой локали. Слоты `singular` и `plural` задают исходные формулировки для форм языка перевода. [`<Plural>`](/docs/vue/reference/components/plural) выбирает нужную форму по правилам локали, а [`<Num>`](/docs/vue/reference/components/num) форматирует число: 12,345 на английском, 12.345 на испанском и 12 345 на польском.

В примере используется `gt-vue` 0.1.22 с Vue 3.3 или новее; настройка плагина и загрузчика каталогов описана в разделе [Быстрый старт для Vue](/docs/vue/quickstart). Ваша команда может доработать сгенерированный текст в [панели управления](/docs/platform/dashboard/guides/reviewing-translations), а [общие термины Glossary и пользовательские промпты](/docs/platform/dashboard/guides/defining-context-for-translations) помогают сохранять единую терминологию во всех проектах.

## Краткое сравнение vue-i18n и General Translation

| Возможность                | vue-i18n                                                                                                     | General Translation (`gt-vue`)                                                                           |
| -------------------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |
| Как пишется текст          | Ключи в файле сообщений или в блоке `<i18n>` для каждой локали                                               | Прямо в шаблонах, внутри [`<T>`](/docs/vue/reference/components/t)                                       |
| Переводит ваш контент      | Нет                                                                                                          | Да, с помощью [`npx gt translate`](/docs/cli/reference/commands/translate)                               |
| Формы множественного числа | Формы разделяются вертикальной чертой; в версии 11 для таких языков, как польский, нужно собственное правило | Слоты [`<Plural>`](/docs/vue/reference/components/plural), выбираемые по правилам CLDR для каждой локали |
| Числа в сообщениях         | Форматируются, только если передать уже отформатированное значение                                           | [`<Num>`](/docs/vue/reference/components/num) форматирует числа для каждой локали                        |
| Интеграция с приложением   | Плагин Vue; `@nuxtjs/i18n` добавляет маршрутизацию Nuxt, определение языка и SEO-теги                        | Плагин Vue с реактивным переключением локали и загрузкой каталогов                                       |

Оставайтесь на vue-i18n, если вы полагаетесь на `@nuxtjs/i18n` для маршрутизации и SEO в Nuxt или у вас уже налажен рабочий процесс на основе каталогов, от которого не хочется отказываться. Выбирайте General Translation, если хотите, чтобы текст в шаблонах Vue оставался читаемым, переводы создавались во время сборки, а рецензенты могли редактировать их в панели управления.

## Переход с vue-i18n

Переносите компоненты по одному: замените каждый поиск по ключу соответствующим английским текстом внутри [`<T>`](/docs/vue/reference/components/t), а сообщения с формами множественного числа, разделёнными вертикальной чертой, преобразуйте в слоты `singular` и `plural` компонента [`<Plural>`](/docs/vue/reference/components/plural), как в примере выше. Для компонентов, которые ещё не перенесены, сохраните vue-i18n и его проверенные каталоги. Настройте `gt-vue` по руководству [Быстрый старт для Vue](/docs/vue/quickstart), а затем запускайте [`npx gt translate`](/docs/cli/reference/commands/translate) перед сборкой.

## Почему vue-i18n выбирает неправильную форму множественного числа для польского языка?

Настройте в vue-i18n 11 функцию `pluralRules`, которая сопоставляет польские категории с позициями в вашем сообщении. Например, для 1 выбирается `one`, для 2 и 22 — `few`, а для 5 — `many`. При использовании General Translation встроенный пример задаёт исходную формулировку, сервис генерирует переведённые формы, а [`<Plural>`](/docs/vue/reference/components/plural) выбирает нужную из них.

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

* vue-i18n — зрелый i18n-плагин с хорошей поддержкой Nuxt, но сам он ничего не переводит, а в версии 11 для таких языков, как польский, нужно писать собственное правило множественного числа.
* CLI от General Translation генерирует переводы из встроенных блоков [`<T>`](/docs/vue/reference/components/t), а `gt-vue` выполняет их рендеринг с выбором формы множественного числа и форматированием чисел для каждой локали.
* Если у вас уже налажен рабочий процесс на Nuxt или с каталогами, оставайтесь на vue-i18n. Выбирайте `gt-vue`, если не хотите больше поддерживать исходные файлы с ключами.

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

## Sitemap

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