# General Translation Knowledge Base: Как мигрировать с Crowdin на General Translation?
URL: https://generaltranslation.com/ru/kb/migrate-from-crowdin.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Сохраните файлы ресурсов, библиотеку интернационализации и проверенные переводы. Включите параметр Skip untranslated strings, скачайте переводы, запретите Git-интеграции Crowdin отправлять переводы и импортируйте файлы с помощью npx gt upload перед первым запуском npx gt translate. После этого General Translation будет переводить новые и изменённые строки во время сборки, используя ваш глоссарий из контекстной группы.
Category: Инструменты для рабочих процессов
Last updated: 2026-11-12
Authors: Kevin Wu
Published: 2026-11-12

В Crowdin хранятся ваши исходные файлы, их переводы, глоссарий и память переводов, а Git-интеграция Crowdin присылает переводы в виде пул-реквестов. При переходе на General Translation файлы ресурсов, которые уже читает ваше приложение, остаются на месте: CLI `gt` импортирует их вместе с существующими переводами, а затем переводит новые и изменённые строки во время сборки или в CI. Библиотека интернационализации, ключи и структура файлов остаются прежними; перенос текстов во встроенный вид — отдельный необязательный шаг (см. [миграцию с react-i18next](/kb/migrate-from-react-i18next) или [с next-intl](/kb/migrate-from-next-intl)). Ваш глоссарий превращается в контекстную группу, которую могут совместно использовать приложение, документация и другие проекты.

## Что переносится из Crowdin?

| В Crowdin                                                     | В General Translation                                                                                                                                                                              |
| ------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Записи `files` в `crowdin.yml`                                | `files` в `gt.config.json`, с `[locale]` вместо `%locale%`                                                                                                                                         |
| Переведённые файлы                                            | Импортируются с помощью [`npx gt upload`](/docs/cli/reference/commands/upload) и сохраняются до изменения исходного текста                                                                         |
| Глоссарий                                                     | Glossary [контекстной группы](/docs/platform/dashboard/guides/defining-context-for-translations), импортируемый из CSV                                                                             |
| Руководство по стилю и AI-промпты                             | [Пользовательские промпты](/docs/platform/dashboard/guides/defining-context-for-translations) — глобальные или для отдельных локалей                                                               |
| Контекст строк и максимальная длина                           | Комментарии в исходных файлах Android и iOS, которые General Translation использует как контекст, или файл [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata), для JSON и YAML |
| Память переводов                                              | Ваши загруженные переводы: для неизменённых строк они сохраняются, а переводятся только новые и изменённые строки. Файлы TMX не импортируются                                                      |
| Интеграция с GitHub или GitLab (по умолчанию ветки `l10n_`)   | [`npx gt translate`](/docs/cli/reference/commands/translate) в CI или пул-реквесты [Locadex](/docs/platform/locadex/quickstart)                                                                    |
| Вычитка и одобрение                                           | Редактирование в [панели управления](/docs/platform/dashboard/guides/reviewing-translations), одобрение — на тарифе Enterprise                                                                     |
| OTA-доставка контента (over-the-air) для мобильных приложений | Переводы поставляются в файлах ресурсов вместе с каждым релизом приложения                                                                                                                         |

CLI поддерживает JSON, YAML, `.pot` и `.po`, iOS `.strings`, `.stringsdict` и `.xcstrings`, Android `strings.xml`, `.resx`, HTML, Markdown и MDX и другие форматы (см. [поддерживаемые форматы](/docs/cli/reference/config#files)). XLIFF, ARB, Java `.properties`, а также файлы строк в CSV и XLSX не поддерживаются.

## Шаг 1: Запретите Crowdin подставлять исходный текст вместо переводов

По умолчанию Crowdin [экспортирует непереведённые строки как исходный текст](https://support.crowdin.com/project-settings/export/), чтобы файлы никогда не оставались пустыми. Если импортировать такие файлы как есть, английский текст будет засчитан как готовые переводы. Перед скачиванием включите **Skip untranslated strings** в разделе **Settings &gt; Export** проекта Crowdin (опция не работает, пока включена **Skip untranslated files**) или задайте [`skip_untranslated_strings`](https://crowdin.github.io/crowdin-cli/advanced) в `crowdin.yml`:

```yaml title="crowdin.yml"
files:
  - source: /locales/en/**/*.json
    translation: /locales/%locale%/**/%original_file_name%
    skip_untranslated_strings: true
```

Что именно означает &quot;skip&quot;, зависит от формата. Из плоского JSON, YAML, Android XML, iOS `.strings` и `.stringsdict`, а также `.resx` Crowdin удаляет непереведённые строки. Во вложенном JSON, i18next JSON, gettext PO, а также в файлах TS или JS он экспортирует их как пустые значения, поэтому перед импортом найдите в этих файлах пустые строки и удалите их. Если нужно перенести только вычитанные переводы, добавьте `export_only_approved: true`.

## Шаг 2: Скачайте переводы

Если исходные файлы уже находятся в вашем репозитории, скачайте переводы с помощью [Crowdin CLI](https://crowdin.github.io/crowdin-cli/commands/crowdin-download). Сначала просмотрите пути:

```bash
crowdin download --dryrun
crowdin download --skip-untranslated-strings
```

Без CLI используйте **Translations &gt; Build &amp; Download** в проекте Crowdin — в этом случае применяются настройки экспорта проекта. Пользователям Crowdin Enterprise нужно указать адрес API своей организации в параметре `base_url` в файле `crowdin.yml`.

Проверьте названия папок локалей. `%locale%` формирует коды языка и региона, например `uk-UA`, а `%two_letters_code%` — только коды языка, например `uk`. Укажите те же коды в `gt.config.json` или переименуйте их при экспорте с помощью параметра Crowdin [`languages_mapping`](https://support.crowdin.com/developer/configuration-file/).

## Шаг 3: запретите Crowdin отправлять переводы

Интеграции Crowdin с GitHub и GitLab [по умолчанию синхронизируются каждый час](https://support.crowdin.com/github-integration/) и открывают пул-реквесты (merge requests в GitLab) из веток `l10n_`. Прежде чем General Translation начнёт записывать файлы, очистите в настройках интеграции поле **Sync Schedule** и сохраните изменения, чтобы Crowdin перестал отправлять переводы в ваш репозиторий. Учтите, что изменить эту настройку может только участник, который настроил интеграцию. Закройте все открытые пул-реквесты из веток `l10n_` и удалите шаги Crowdin из CI. Когда управление файлами перейдёт к General Translation, интеграцию можно удалить полностью. Если два инструмента записывают одни и те же файлы, сохранятся изменения того, кто записал их последним.

## Шаг 4: Настройте CLI на те же файлы

Установите CLI `gt` и перенесите записи из `crowdin.yml` в `gt.config.json`. Каждый паттерн `translation` превращается в паттерн `include` с `[locale]`:

```json title="gt.config.json"
{
  "defaultLocale": "en",
  "locales": ["de-DE", "pt-BR", "uk-UA"],
  "files": {
    "json": { "include": ["locales/[locale]/**/*.json"] }
  }
}
```

Войдите с помощью [`npx gt login`](/docs/cli/reference/commands/login) и задайте `GT_PROJECT_ID` либо укажите `projectId` в конфигурации. В CI используйте переменную `GT_API_KEY` с ключом API проекта, у которого есть разрешения **Files &gt; Write**, **Translation queue &gt; Enabled** и **Context &gt; Write**.

## Шаг 5: Перенесите глоссарий и контекст строк

Владелец или менеджер проекта может скачать глоссарий в формате CSV на странице [Glossaries](https://support.crowdin.com/glossary/) в Crowdin или через CLI (ID глоссария можно узнать с помощью `crowdin glossary list`):

```bash
crowdin glossary download <glossary-id> --format csv --to ./glossary.csv
```

Crowdin называет столбцы по языкам. Переименуйте `Term [en]` в `term`, `Description [en]` в `definition`, а каждый столбец целевого языка, например `Term [de]`, — в `translation_de`; удалите остальные столбцы и сохраните файл. Импортер General Translation считывает файлы с такой структурой напрямую, а файлы с другой структурой распознаёт с помощью ИИ. В панели управления создайте [контекстную группу](/docs/platform/dashboard/guides/defining-context-for-translations), нажмите **Import**, выберите файл и назначьте группу своему проекту до первого запуска перевода — тогда новые переводы с самого начала будут использовать вашу терминологию.

Контекст строки объясняет переводчику, что она означает, — неважно, написал её разработчик или сгенерировал Crowdin. Комментарии над строками в исходных файлах Android `strings.xml` и iOS `.strings` уже передаются в General Translation как контекст. Если контекст хранится только в Crowdin, получите `context` и `maxLength` каждой строки через [API исходных строк](https://support.crowdin.com/developer/api/v2/#tag/Source-Strings/operation/api.projects.strings.getMany) Crowdin. Для Android и iOS добавьте контекст в виде комментариев в исходные файлы, а для JSON и YAML запишите оба значения в файл [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata) рядом с исходным файлом:

```json title="locales/en/common.metadata.json"
{
  "checkout": {
    "save": { "context": "Button that saves the shipping address", "maxChars": 12 }
  }
}
```

Воссоздайте своё руководство по стилю и инструкции для ИИ в виде [пользовательских промптов](/docs/platform/dashboard/guides/defining-context-for-translations). Чтобы сохранить архив памяти переводов (TM), скачайте её в формате TMX командой `crowdin tm download <tm-id>`.

## Шаг 6: Загрузите файлы перед переводом

Сначала выполните [`npx gt upload`](/docs/cli/reference/commands/upload). Эта команда отправляет каждый исходный файл вместе с соответствующими переведёнными файлами для всех локалей и сохраняет эти переводы как завершённые:

```bash
npx gt upload
npx gt translate
```

Затем [`npx gt translate`](/docs/cli/reference/commands/translate) переводит только недостающее — например, новую локаль или файл без перевода — и записывает результаты по тем же путям. Если запустить [`npx gt translate`](/docs/cli/reference/commands/translate) до [`npx gt upload`](/docs/cli/reference/commands/upload), будут созданы новые переводы, которые перезапишут скачанные файлы. Строки, которые не были переведены в Crowdin, General Translation переведёт при следующем изменении их исходного файла. Чтобы опубликовать их раньше, завершите их перевод в Crowdin до скачивания.

## Шаг 7: автоматически переводите новые тексты

Теперь запускайте [`npx gt translate`](/docs/cli/reference/commands/translate) в процессе [сборки или в CI](/kb/translations-in-ci) либо поручите [Locadex](/docs/platform/locadex/quickstart) открывать пул-реквесты с переводами. Закоммитьте файл `gt-lock.json`: в нём фиксируются переводы, которые CLI уже записал, чтобы не загружать их повторно. Если ваша команда редактирует переведённые файлы прямо в репозитории, перед следующим переводом запускайте [`npx gt save-local`](/docs/cli/reference/commands/save-local), чтобы эти правки сохранились.

## Когда стоит остаться на Crowdin?

Оставайтесь на Crowdin, если проект с открытым исходным кодом пользуется бесплатной лицензией Crowdin и опирается на переводчиков из сообщества, если вы заказываете перевод, выполняемый людьми, через маркетплейс подрядчиков Crowdin, если вы обмениваетесь файлами XLIFF или Office, а также если нативные мобильные приложения зависят от обновлений по воздуху (OTA). (См. [General Translation и Crowdin: сравнение](/kb/general-translation-vs-crowdin).)

## Часто задаваемые вопросы

### Потеряю ли я вычитанные переводы?

Нет, если при экспорте вы пропустите непереведённые строки и запустите [`npx gt upload`](/docs/cli/reference/commands/upload) до [`npx gt translate`](/docs/cli/reference/commands/translate). Загруженные переводы остаются на месте, пока не изменится их исходный текст, а ваша команда может исправить любой перевод в [панели управления](/docs/platform/dashboard/guides/reviewing-translations).

### Можно ли продолжать использовать Crowdin для части контента?

Да. Настройте `include` и `exclude` в `gt.config.json` так, чтобы они охватывали только файлы, которыми управляет General Translation, а синхронизацию всего остального оставьте за Crowdin. Не допускайте, чтобы оба инструмента записывали одни и те же файлы.

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

* Перед экспортом включите параметр Skip untranslated strings, иначе Crowdin заполнит пропуски исходным текстом, и он будет импортирован как перевод.
* Запретите Git-интеграции Crowdin отправлять переводы раньше, чем General Translation запишет те же файлы.
* Перенесите настройки из `crowdin.yml` в `gt.config.json`, импортируйте глоссарий в контекстную группу и перед переводом перенесите контекст строк из Crowdin в контекст отдельных ключей.
* Выполните [`npx gt upload`](/docs/cli/reference/commands/upload) перед первым запуском [`npx gt translate`](/docs/cli/reference/commands/translate), а затем переводите новые тексты при сборке или с помощью Locadex.

## Related questions

- [Альтернативы Crowdin: General Translation или Crowdin](https://generaltranslation.com/ru/kb/general-translation-vs-crowdin.mdx): Выбирайте General Translation, если хотите хранить тексты прямо в компонентах и создавать переводы во время сборки. Crowdin управляет проектами перевода, выстроенными вокруг файлов ресурсов, переводчиков и процессов проверки, — инженерам приходится подключать всё это к приложению и поддерживать по мере развития продукта. При этом Crowdin по-прежнему хорошо подходит для перевода силами сообщества с открытым исходным кодом и для программ, которые ведут подрядчики.
- [Как мигрировать с Lokalise на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-lokalise.mdx): Сохраните файлы ресурсов, библиотеку интернационализации и проверенные переводы. Экспортируйте данные из Lokalise без пустых переводов, отключите синхронизацию с GitHub и импортируйте файлы командой npx gt upload перед первым запуском npx gt translate. После этого General Translation будет переводить новые и изменённые строки во время сборки, используя ваш Glossary из контекстной группы и описания ключей в качестве контекста для каждого ключа.
- [Как мигрировать с Phrase на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-phrase.mdx): Сохраните файлы локалей, библиотеку интернационализации и проверенные переводы. Выгрузите файлы из Phrase Strings без непереведённых ключей и резервных вариантов, отключите Repo Sync и импортируйте файлы командой npx gt upload перед первым запуском npx gt translate. После этого General Translation переводит новые и изменённые строки во время сборки, используя вашу терминологическую базу из контекстной группы и описания ключей в качестве контекста для каждого ключа.
- [Как поддерживать переводы в актуальном состоянии при каждом развёртывании?](https://generaltranslation.com/ru/kb/translations-in-ci.mdx): Запускайте перевод как этап конвейера перед каждой сборкой для рабочей среды — тогда новые тексты попадут в то же развёртывание, что и сами изменения, уже переведёнными. В CLI gt от General Translation для этого служит команда npx gt translate, которая использует ключ API проекта и идентификатор проекта, сохранённые как секреты CI.
- [Что такое память переводов и нужна ли она в эпоху ИИ?](https://generaltranslation.com/ru/kb/what-is-translation-memory.mdx): Память переводов (TM) — это база данных пар исходных и целевых сегментов из прошлых переводов, в которой инструмент перевода ищет точные, контекстные и нечёткие совпадения. При работе с ИИ по-прежнему важно повторно использовать утверждённые формулировки и передавать прошлые переводы как контекст. General Translation повторно использует совпадающие переводы из предыдущих версий файлов и сохраняет правки команды, и при этом не нужно поддерживать отдельную TM.

## Previous and next questions

- Previous question: [Время сборки, время выполнения или прокси для перевода: как доставлять переводы?](https://generaltranslation.com/ru/kb/build-time-vs-runtime-translation.mdx)
- Next question: [Как мигрировать с Lokalise на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-lokalise.mdx)

## Sitemap

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