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

Rails I18n — это API интернационализации, встроенный в Ruby on Rails: вы вызываете `t` и `l` в представлениях и контроллерах, а Rails находит сообщение для текущей локали в YAML-файлах в каталоге `config/locales`. Он отвечает за рендеринг переводов, а их создание оставляет вам, вашим переводчикам или стороннему сервису. General Translation создаёт эти переводы на основе исходного английского текста с учётом терминологии вашего продукта. Ваши представления, контроллеры и вызовы Rails I18n остаются без изменений.

## Чем хорош Rails I18n

* **Встроенная поддержка.** Rails [автоматически загружает все файлы `.yml` и `.rb` из `config/locales`](https://guides.rubyonrails.org/i18n.html#configuring-the-load-paths-and-default-locale). Корнем каждого YAML-файла служит ключ локали (`en:`, `es:`), поэтому переводы одного приложения можно разнести по множеству файлов.
* **Ленивый поиск по ключу.** В `app/views/inbox/show.html.erb` вызов [`t(".title")` разрешается в `inbox.show.title`](https://guides.rubyonrails.org/i18n.html#lazy-lookup), а в действии контроллера `t(".success")` разрешается с учётом имени контроллера и действия, так что ключи повторяют структуру ваших файлов.
* **Интерполяция и безопасный HTML.** Сообщения принимают именованные значения, например `%{name}`, а [ключи с суффиксом `_html` рендерятся без экранирования](https://guides.rubyonrails.org/i18n.html#using-safe-html-translations), при этом подставляемые в них значения по-прежнему экранируются.
* **Резервные варианты и ограничение локалей.** В новых приложениях Rails для рабочей среды задано `config.i18n.fallbacks = true`, поэтому при отсутствии ключа текст выводится на языке по умолчанию, а [`config.i18n.available_locales` ограничивает набор локалей, которые принимает приложение](https://guides.rubyonrails.org/configuring.html#config-i18n-available-locales).
* **Данные локалей от сообщества.** Gem [rails-i18n](https://github.com/svenfuchs/rails-i18n) (8.1.0, MIT) добавляет форматы дат, времени и чисел, сообщения об ошибках Active Record и правила множественного числа CLDR более чем для 100 локалей.
* **Никакой регистрации.** Это обычный Ruby и YAML, а [руководство по Rails](https://guides.rubyonrails.org/i18n.html) подробно описывает всё от начала до конца.

## Что Rails I18n оставляет на вас

Rails I18n знает только те сообщения, которые вы ему передали. Вот представление папки «Входящие» и его сообщения на английском:

```yaml title="config/locales/en.yml"
en:
  inbox:
    show:
      title: "Inbox"
      unread:
        one: "You have %{count} unread message."
        other: "You have %{count} unread messages."
```

```erb title="app/views/inbox/show.html.erb"
<h1><%= t(".title") %></h1>
<p><%= t(".unread", count: @count) %></p>
```

Если выбрать испанский язык, этот файл не переведётся сам собой. При включённых резервных вариантах на английском испаноязычные читатели по-прежнему видят «Inbox» и «You have 3 unread messages.» Чтобы показывать текст на испанском, Rails нужен испанский каталог. Каждое новое или изменённое английское сообщение требует такой же работы для каждого языка.

Gem [rails-i18n](https://github.com/svenfuchs/rails-i18n) предоставляет форматы локалей и правила множественного числа. [i18n-tasks](/kb/general-translation-vs-i18n-tasks) находит отсутствующие ключи и формы множественного числа. General Translation поставляет переведённые сообщения, с которыми работают эти инструменты.

## Перевод файлов локалей Rails с помощью General Translation

Поиск по ключу оставьте за Rails I18n, а остальные файлы локалей пусть генерирует General Translation. CLI `gt` работает на Node.js, умеет переводить YAML и сохраняет ваши ключи. В этом примере перевода с английского на испанский храните сообщения в `translations/en.yml` без внешнего ключа `en:`:

```yaml title="translations/en.yml"
inbox:
  show:
    title: "Inbox"
    unread:
      one: "You have %{count} unread message."
      other: "You have %{count} unread messages."
```

Укажите эти рабочие файлы в `gt.config.json`. Небольшой шаг экспорта добавляет ключи локалей Rails и записывает каталоги, которые загружает приложение:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": [
    "es"
  ],
  "files": {
    "yaml": {
      "include": [
        "translations/[locale].yml"
      ]
    }
  }
}
```

Задайте `GT_PROJECT_ID` и `GT_API_KEY`, как описано в разделе [Генерация переводов](/docs/cli/guides/generating-translations). Если у вас уже есть переводы для этого каталога, поместите их в `translations/es.yml` без корневого ключа `es:` и, прежде чем генерировать новые переводы, выполните [`npx gt upload`](/docs/cli/reference/commands/upload).

```ruby title="script/export_rails_locales.rb"
require "json"
require "yaml"
require "fileutils"

config = JSON.parse(File.read("gt.config.json"))
locales = ([config.fetch("defaultLocale")] + config.fetch("locales")).uniq
catalogs = locales.to_h do |locale|
  messages = YAML.safe_load_file("translations/#{locale}.yml", aliases: true)
  raise "Expected a message map for #{locale}" unless messages.is_a?(Hash)
  [locale, { locale => messages }.to_yaml]
end

FileUtils.mkdir_p("config/locales")
catalogs.each do |locale, catalog|
  File.write("config/locales/#{locale}.yml", catalog)
end
```

```bash
npx gt translate && ruby script/export_rails_locales.rb
```

При экспорте создаются файлы этого каталога `config/locales/en.yml` и `config/locales/es.yml`. Продолжайте редактировать рабочие файлы в `translations/`, а приложение будет загружать экспортированные копии. Перед следующим запуском перевода синхронизируйте локальные правки переводов с помощью [`npx gt save-local`](/docs/cli/reference/commands/save-local).

General Translation переводит каждый файл с учётом [Glossary и пользовательских промптов](/docs/platform/dashboard/guides/defining-context-for-translations) вашего проекта, поэтому название продукта или официальный тон сохраняются во всех файлах локалей, а ваша команда может [просматривать и редактировать переводы](/docs/platform/dashboard/guides/reviewing-translations) в панели управления. Для неизменённых записей используются ранее сделанные переводы, поэтому при запуске CLI в CI после каждого слияния переводится только то, что изменилось.

Перед релизом выполните `i18n-tasks missing` и `i18n-tasks check-consistent-interpolations`, чтобы проверить ключи, формы множественного числа и заполнители `%{count}` в экспортированных каталогах.

## Rails I18n и General Translation: краткое сравнение

| Возможность                            | Rails I18n                                             | General Translation                                                                   |
| -------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------- |
| Что это                                | Библиотека Ruby для поиска и форматирования переводов  | Платформа перевода с CLI, библиотеками для JavaScript и Python и панелью управления   |
| Рендеринг переводов в приложении Rails | Да, в представлениях, контроллерах и мейлерах          | Предоставляет каталоги для тех же вызовов Rails I18n                                  |
| Создание переводов                     | Нет                                                    | Да, YAML-файлы с помощью [`npx gt translate`](/docs/cli/reference/commands/translate) |
| Правила множественного числа           | По умолчанию — английские; правила CLDR — с rails-i18n | Переводит настроенные исходные формы; Rails выбирает нужную во время выполнения       |
| Согласованность между файлами          | Зависит от ваших переводчиков                          | Glossary и пользовательские промпты применяются к каждому файлу                       |
| Проверка                               | Ваш процесс ревью пул-реквестов                        | Панель управления плюс ваш процесс ревью пул-реквестов                                |
| Стоимость                              | Бесплатно, MIT                                         | [Оплата по факту использования](https://generaltranslation.com/pricing)               |

Используйте только Rails I18n, если файлы локалей вам уже поставляют переводчики или подрядчик либо если вы поддерживаете один-два языка и редактируете их вручную. Подключите General Translation, если английский текст часто меняется и вы хотите, чтобы все файлы локалей автоматически перегенерировались в CI с единой терминологией, а не ждать очередного цикла перевода.

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

* Rails I18n выполняет рендеринг переводов из `config/locales` и форматирует даты и числа; rails-i18n добавляет правила множественного числа и данные локали. Ни тот, ни другой не создаёт переводы.
* General Translation переводит YAML с учётом вашего Glossary и пользовательских промптов и поддерживает переводы в актуальном состоянии при изменении английского текста.
* Храните редактируемые каталоги в `translations/`, а после запуска [`npx gt translate`](/docs/cli/reference/commands/translate) экспортируйте их в корневые каталоги локалей Rails.

## Related questions

- [General Translation или i18n-tasks: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-i18n-tasks.mdx): i18n-tasks — это Ruby-gem, который находит отсутствующие и неиспользуемые ключи Rails I18N, наводит порядок в файлах локалей и умеет заполнять недостающие ключи с помощью Google Translate, DeepL, OpenAI, Yandex или watsonx. General Translation переводит файлы локалей целиком с учётом вашего Glossary и пользовательских промптов, а результат можно проверить в панели управления. Эти инструменты решают разные задачи, и многим командам пригодятся оба.
- [General Translation или Mobility: что выбрать?](https://generaltranslation.com/ru/kb/general-translation-vs-mobility.mdx): Mobility хранит переведённые атрибуты моделей в вашей базе данных. General Translation создаёт эти переводы через свой API с учётом вашего Glossary и пользовательских промптов. Используйте оба инструмента, чтобы переводить карточки товаров, публикации и другой контент из базы данных, не отказываясь от своих моделей Rails.
- [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 вместо 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 и GNU gettext: нужны ли оба?](https://generaltranslation.com/ru/kb/general-translation-vs-gettext.mdx)
- Next question: [General Translation и фреймворк переводов Django: нужны ли оба?](https://generaltranslation.com/ru/kb/general-translation-vs-django-i18n.mdx)

## Sitemap

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