# General Translation Knowledge Base: General Translation или i18n-tasks: что выбрать?
URL: https://generaltranslation.com/ru/kb/general-translation-vs-i18n-tasks.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: i18n-tasks — это Ruby-gem, который находит отсутствующие и неиспользуемые ключи Rails I18N, наводит порядок в файлах локалей и умеет заполнять недостающие ключи с помощью Google Translate, DeepL, OpenAI, Yandex или watsonx. General Translation переводит файлы локалей целиком с учётом вашего Glossary и пользовательских промптов, а результат можно проверить в панели управления. Эти инструменты решают разные задачи, и многим командам пригодятся оба.
Category: Инструменты для рабочих процессов
Last updated: 2026-10-16
Authors: Kevin Wu, Jackie Chen
Published: 2026-10-16

i18n-tasks — это инструмент командной строки для Ruby-приложений, использующих gem i18n, а значит, для любого Rails-приложения. Он ищет в коде вызовы вроде `t(".title")`, сверяет их с файлами локалей и сообщает о недостающих или неиспользуемых ключах, а команда `translate-missing` заполняет пробелы через сервис машинного перевода, к которому вы подключаетесь со своим API-ключом. Инструмент проверяет переводы и может машинно перевести недостающий ключ, но не следит за актуальностью переводов при изменении английского текста. General Translation берёт на себя сам перевод: его CLI генерирует все файлы локалей из английского источника с учётом вашего Glossary и пользовательских промптов, поэтому эти два инструмента скорее дополняют друг друга, чем конкурируют.

## Что i18n-tasks делает хорошо

* **Находит отсутствующие и неиспользуемые ключи в коде.** [AST-сканер читает файлы `.rb` и `.html.erb`](https://github.com/glebm/i18n-tasks#features--limitations) (а сканер на регулярных выражениях поддерживает и другие форматы, например HAML), разрешает относительные ключи вроде `t(".title")` и сообщает о ключах, которые используются в коде, но отсутствуют в локали, а также о ключах, которые есть в локали, но нигде не используются.
* **Проверки с учётом множественного числа.** С правилами множественного числа из rails-i18n [`missing` сообщает о локалях, в которых не хватает какой-либо формы CLDR](https://github.com/glebm/i18n-tasks/blob/main/CHANGES.md), например польских `few` и `many`.
* **Удобство для CI.** `missing`, `unused` и другие проверки при обнаружении проблем завершаются со статусом 1, а в gem входят [шаблоны для RSpec и Minitest](https://github.com/glebm/i18n-tasks/tree/main/templates), из-за которых набор тестов падает при отсутствующих или неиспользуемых ключах.
* **Порядок в файлах.** [`normalize` сортирует ключи](https://github.com/glebm/i18n-tasks#normalize) (а с `-p` переносит их в файлы, указанные в вашей конфигурации), `mv` и `rm` переименовывают или удаляют ключи сразу во всех локалях, `find` показывает, где используется ключ, а `check-consistent-interpolations` находит `%{count}`, который при переводе переименовали или потеряли.
* **Пять бэкендов перевода.** [`translate-missing` работает с Google Translate, DeepL, Yandex, OpenAI и IBM watsonx](https://github.com/glebm/i18n-tasks#translation-backends). Можно [задать идентификаторы глоссариев и параметры DeepL](https://github.com/glebm/i18n-tasks/blob/main/templates/config/i18n-tasks.yml), а для OpenAI — модель (по умолчанию `gpt-4o-mini`), системный промпт и отдельный промпт для каждой локали. Перед отправкой заполнители `%{...}` заменяются токенами, а после — восстанавливаются.
* **Бесплатно.** Распространяется [под лицензией MIT (версия 1.1.2)](https://rubygems.org/gems/i18n-tasks); за перевод вы платите напрямую каждому провайдеру — обычно за символ или за токен.

## Что i18n-tasks оставляет вам

Вот вывод `missing` и `unused` для небольшого Rails-приложения с файлами на английском, польском и испанском, где представление inbox обращается к ключу, который никто не определил:

```text title="bundle exec i18n-tasks missing (excerpt)"
| Locale | Key                 | Value in other locales or source  |
|  all   | inbox.show.empty    | app/views/inbox/show.html.erb:3   |
|   es   | inbox.show.title    | en Inbox                          |
|   es   | inbox.show.unread   | en {"one" => "You have %{count} unread message.", ...} |
|   pl   | flash.saved         | en Saved.                         |
|   pl   | inbox.show.unread   | few, many                         |
```

```text title="bundle exec i18n-tasks unused"
| Locale | Key                 | Value    |
|   en   | inbox.show.archived | Archived |
```

Этот отчёт точен и полезен. А вот заполнять пробелы придётся вам:

* **Бэкенд Google отправляет только значения строк.** В запуске, где сетевой вызов этого бэкенда был заменён заглушкой, `translate-missing es` отправил приведённые ниже значения с замаскированными заполнителями — без ключей, файла и представления.

  ```text
  ["Inbox", "You have X__0 unread message.", "You have X__0 unread messages.", "Archived"]
  ```

* **Формы множественного числа повторяют английскую структуру.** Для польского ключа, который отсутствовал полностью, инструмент записал `one` и `other`, а следующий запуск `missing` сообщил о недостающих `few, many`.

* **Изменённый английский текст заново не переводится.** [`translate-missing` заполняет ключи, которых нет в локали](https://github.com/glebm/i18n-tasks#translate-missing-keys). Если вы правите английскую строку, существующие переводы остаются без изменений.

* **Даже неудачный запрос к Google может записать файлы.** Без заданного ключа API Google команда `translate-missing --backend=google pl` предупредила о сбое фрагмента, сообщила, что два ключа переведены, скопировала английские значения в `pl.yml` и завершилась с кодом 0. После этого ключи пропали из вывода `missing`, и обнаружить их удалось только через `eq-base` (переводы, совпадающие с источником).

## Место General Translation в рабочем процессе

General Translation отвечает за генерацию переводов, а i18n-tasks проверяет каталоги Rails. Укажите CLI `gt` путь к английскому файлу и запускайте [`npx gt translate`](/docs/cli/reference/commands/translate) в CI. Команда создаёт файлы для всех целевых локалей, а при последующих запусках повторно использует переводы неизменённых записей и заново переводит те, в которых изменился английский текст. При каждом запуске применяются [Glossary и пользовательские промпты](/docs/platform/dashboard/guides/defining-context-for-translations) вашего проекта, поэтому терминология и тон остаются единообразными во всех файлах, а ваша команда может [просматривать и редактировать переводы](/docs/platform/dashboard/guides/reviewing-translations) в панели управления.

Оставьте i18n-tasks для сканирования исходного кода Ruby и валидации каталогов. Для генерации переводов используйте CLI General Translation на Node.js, а полученный YAML преобразуйте в формат Rails с локалью на верхнем уровне, как показано в статье [General Translation vs. Rails I18n](/kb/general-translation-vs-rails-i18n). Этот рабочий процесс подходит для каталогов, в которых структура ключей источника и целевой локали совпадает.

## i18n-tasks и General Translation: краткое сравнение

| Возможность                      | i18n-tasks                                                                      | General Translation                                                                           |
| -------------------------------- | ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| Назначение                       | Сканирует код на Ruby и находит отсутствующие или неиспользуемые ключи каталога | Генерирует переводы и поддерживает их в актуальном состоянии при изменении исходного текста   |
| Проверка множественных форм      | Проверяет наличие обязательных категорий для локали                             | Используйте генерацию вместе с проверками i18n-tasks                                          |
| Машинный перевод                 | `translate-missing` через выбранного вами провайдера                            | [`npx gt translate`](/docs/cli/reference/commands/translate)                                  |
| Контекст перевода                | Зависит от бэкенда: DeepL принимает ID глоссариев, OpenAI — промпты             | Содержимое и метаданные вашего файла, а также назначенные Glossary и пользовательские промпты |
| При изменении английского текста | Существующие переводы не меняются                                               | Изменённые записи переводятся заново                                                          |
| Проверка                         | Git diff                                                                        | Панель управления и Git diff                                                                  |
| Стоимость                        | Бесплатный gem; провайдер берёт плату за символы или токены                     | [Оплата перевода по факту использования](https://generaltranslation.com/pricing)              |

Ограничьтесь одним i18n-tasks, если файлы локалей пишут переводчики и вам нужно, чтобы CI находил отсутствующие и неиспользуемые ключи, или если нужен лишь быстрый машинный черновик для нескольких строк. Выбирайте General Translation, если хотите, чтобы переводы обновлялись вслед за изменениями английского текста, терминология оставалась единообразной, а проверка выполнялась в панели управления. При этом i18n-tasks стоит оставить для сканирования исходного кода Rails и проверки каталогов.

## Совместное использование в CI

Возьмите настройку каталога для перевода с английского на испанский из раздела [Интеграция с Rails](/kb/general-translation-vs-rails-i18n). Сначала выполните перевод и сопоставление локалей, а затем с помощью i18n-tasks проверьте полноту ключей, категории множественного числа и заполнители:

```bash
npx gt translate
ruby script/export_rails_locales.rb                     # экспорт каталогов для Rails
bundle exec i18n-tasks missing                           # ключи, используемые в коде, и формы множественного числа
bundle exec i18n-tasks unused
bundle exec i18n-tasks check-consistent-interpolations   # %{name} совпадает с источником
```

Каждая команда `i18n-tasks` при обнаружении проблемы завершается с кодом 1, поэтому задача завершится с ошибкой ещё до того, как повреждённый файл будет слит в ветку. Для работы CLI нужны идентификатор проекта и ключ API с разрешениями **Files &gt; Write** и **Translation queue &gt; Enabled**, заданные в переменных `GT_PROJECT_ID` и `GT_API_KEY`. (См. [Настройка CLI](/docs/cli/guides/configuring#credentials).)

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

* i18n-tasks находит в приложениях на Rails отсутствующие, неиспользуемые и неполные ключи множественного числа.
* `translate-missing` заполняет отсутствующие ключи, но не обновляет существующие переводы, когда вы редактируете английский источник.
* General Translation переводит файлы локалей целиком с учётом вашего Glossary и пользовательских промптов и поддерживает их в актуальном состоянии при изменении английского текста. Запускайте его перед проверками i18n-tasks в той же задаче CI.

## Related questions

- [General Translation и Rails I18n: нужны ли оба?](https://generaltranslation.com/ru/kb/general-translation-vs-rails-i18n.mdx): Rails I18n находит сообщения и форматирует даты и числа. General Translation создаёт переводы, поддерживает их в актуальном состоянии по мере изменения английского текста и предоставляет вашей команде панель управления для проверки. Используйте оба инструмента, чтобы выпускать переведённые каталоги Rails с каждым релизом.
- [General Translation или Mobility: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-mobility.mdx): Mobility хранит переведённые атрибуты моделей в вашей базе данных. General Translation создаёт эти переводы через свой API с учётом вашего Glossary и пользовательских промптов. Используйте оба инструмента, чтобы переводить карточки товаров, публикации и другой контент из базы данных, не отказываясь от своих моделей Rails.
- [Альтернативы Google Translate: General Translation и Google Translate](https://generaltranslation.com/ru/kb/general-translation-vs-google-translate.mdx): Google Translate — быстрый способ перевести разовый текст, но чтобы выпустить продукт на другом языке, нужно переводить каждую строку с учётом контекста, соблюдать единую терминологию, правильно обрабатывать переменные и формы множественного числа, проводить ревью и выстроить процесс релизов. General Translation понимает контекст каждой строки в вашем коде и автоматизирует весь рабочий процесс локализации — от кода до ревью и каждого релиза.
- [Почему стоит выбрать 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 переводит контент прямо в вашем коде с учётом контекста, выпускает все языки с каждым релизом и работает на библиотеках с открытым исходным кодом без привязки к поставщику.
- [Какое ПО для локализации лучше всего подходит разработчикам?](https://generaltranslation.com/ru/kb/best-localization-software.mdx): Ищите единую систему, которая охватывает весь конвейер — от библиотеки интернационализации в вашем коде до перевода и доставки, — а не собирайте по частям отдельную библиотеку, систему управления переводами и поставщика переводов.

## Previous and next questions

- Previous question: [General Translation или Babel и Flask-Babel: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-flask-babel.mdx)
- Next question: [General Translation или Intlayer: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-intlayer.mdx)

## Sitemap

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