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

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

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

| В Lokalise                                                     | В General Translation                                                                                                                                                                     |
| -------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Ключи, экспортированные в виде файлов для каждой платформы     | Те же файлы, перечисленные в разделе `files` в `gt.config.json`                                                                                                                           |
| Переводы                                                       | Импортируются с помощью [`npx gt upload`](/docs/cli/reference/commands/upload) и сохраняются, пока не изменится исходный текст                                                            |
| Glossary                                                      | Glossary [контекстной группы](/docs/platform/dashboard/guides/defining-context-for-translations), импортированный из CSV                                                                  |
| Руководства по стилю для Pro AI                                | [Пользовательские промпты](/docs/platform/dashboard/guides/defining-context-for-translations) — глобальные или для отдельных локалей                                                      |
| Описания ключей и ограничения на количество символов           | Комментарии в файлах iOS и Android, которые General Translation использует как контекст, или файл [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata), для JSON и YAML |
| Память переводов                                               | Ваши загруженные переводы: для неизменённых строк они сохраняются, а переводятся только новые и изменённые строки. Файлы TMX не импортируются                                             |
| GitHub App, auto-pull и GitHub Actions                         | [`npx gt translate`](/docs/cli/reference/commands/translate) в CI или пул-реквесты от [Locadex](/docs/platform/locadex/quickstart)                                                        |
| Задачи на проверку                                             | Редактирование в [панели управления](/docs/platform/dashboard/guides/reviewing-translations), одобрение — в тарифе Enterprise                                                             |
| SDK для обновлений по воздуху (OTA) для iOS, Android и Flutter | Переводы поставляются в файлах ресурсов вашего приложения с каждым релизом                                                                                                                |

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: Экспортируйте по одному файлу на каждый язык

Lokalise не хранит ваши исходные файлы: при каждом экспорте он собирает их заново из ключей. Если в вашем репозитории уже есть файлы, синхронизированные через Lokalise, экспортируйте с теми же настройками, чтобы результат совпадал, и перед импортом сравните его с содержимым репозитория.

Экспорт JSON для веб-приложения с помощью [CLI `lokalise2`](https://github.com/lokalise/lokalise-cli-2-go/blob/master/docs/lokalise2_file_download.md) выглядит так:

```bash
lokalise2 --token "$LOKALISE_TOKEN" --project-id "$LOKALISE_PROJECT_ID" file download \
  --format json \
  --original-filenames=false \
  --bundle-structure "locales/%LANG_ISO%/common.json" \
  --unzip-to . \
  --export-empty-as skip \
  --filter-data nonhidden \
  --async
```

Для чистого импорта важны четыре настройки:

* **`--export-empty-as skip`.** По умолчанию Lokalise экспортирует непереведённые ключи как пустые строки, а `base` заполняет их исходным текстом. В обоих случаях они будут импортированы как переводы. `skip` исключает такие ключи из экспорта.
* **Форматы множественного числа и плейсхолдеров.** Выберите формат, который понимает ваша библиотека: `--plural-format i18next_v4` для ключей `_one` и `_other` в i18next или `--plural-format icu --placeholder-format icu` для next-intl. (Подробнее см. в документации Lokalise о [форматах множественного числа и плейсхолдеров](https://developers.lokalise.com/reference/api-plurals-and-placeholders).)
* **Платформы.** Каждый ключ привязан к одной или нескольким платформам, и в экспорт попадают только ключи платформы, которой соответствует выбранный формат. Выполняйте отдельный экспорт для каждой платформы: `--format strings` и `stringsdict` для iOS и `--format xml` для Android.
* **`--async`.** Синхронное скачивание в Lokalise работает только для проектов, в которых менее 10 000 пар «ключ — язык»; для более крупных проектов нужно асинхронное.

Если вы не используете CLI, откройте страницу проекта **Download**, выберите формат, установите для **Empty translations** значение skip и нажмите **Build and download**. Для скачивания нужно разрешение участника **Download files**.

Проверьте коды локалей в названиях папок. Lokalise использует собственные коды языков, например `en_GB`, и CLI сравнивает их со списком `locales` на точное совпадение. Чтобы переопределить код, нажмите на него на странице **Download** или используйте `--language-mapping`. Кроме того, можно указать в `gt.config.json` коды в том виде, в каком они экспортируются.

## Шаг 2: Остановите синхронизацию Lokalise

Прежде чем General Translation начнёт записывать файлы, отключите все пути, по которым переводы попадают в ваш репозиторий:

* Удалите вебхук автоматического pull от Lokalise в настройках репозитория GitHub.
* Перестаньте использовать триггер GitHub при скачивании, который открывает пул-реквесты из новой ветки.
* Удалите или отключите рабочие процессы, использующие GitHub Actions для push и pull от Lokalise.

Приложения для GitLab, Bitbucket и Azure DevOps работают так же. Если два инструмента записывают одни и те же файлы, сохранятся изменения того, кто записал их последним.

## Шаг 3: Укажите CLI путь к файлам

Установите CLI `gt` и укажите экспортированные файлы в `gt.config.json`:

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

Если CLI находит `i18next` или `next-intl` в вашем `package.json`, он считывает из JSON синтаксис сообщений i18next и next-intl, а остальные значения JSON обрабатывает как обычные строки. (См. [JSON-файлы](/docs/cli/reference/formats/json-files).)

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

## Шаг 4: Перенесите Glossary и контекст ключей

На странице [Glossary](https://docs.lokalise.com/en/articles/1400629-glossary) в Lokalise выберите **More &gt; Download CSV**, чтобы экспортировать все термины вместе с переводами. Разделителем в файле служит точка с запятой, а для каждого языка отведён отдельный столбец, например `de_DE`. Оставьте `term`, переименуйте `description` в `definition`, а каждый языковой столбец — в `translation_<locale>`, например `translation_de`, удалите остальные столбцы и сохраните файл с запятой в качестве разделителя. Импортер General Translation читает такую структуру напрямую, а файлы с другой структурой разбирает с помощью ИИ. В панели управления создайте [контекстную группу](/docs/platform/dashboard/guides/defining-context-for-translations), нажмите **Import**, выберите файл и назначьте группу своему проекту до первого запуска перевода — тогда новые переводы с самого начала будут использовать вашу терминологию.

Описания ключей объясняют переводчику, что означает строка. При экспорте в iOS `.strings` и Android `strings.xml` они по умолчанию включаются в виде комментариев, а General Translation передаёт эти комментарии как контекст. Для JSON получите описание и ограничение по количеству символов для каждого ключа через `lokalise2 key list` или из экспорта языка-источника в формате [`json_structured`](https://docs.lokalise.com/en/articles/3229161-structured-json), сохранённого вне папок, указанных в `gt.config.json`, и запишите их в файл [метаданных, привязанных к ключам](/docs/cli/reference/keyed-metadata) рядом с исходным файлом:

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

Перенесите свои руководства по стилю из Pro AI в [пользовательские промпты](/docs/platform/dashboard/guides/defining-context-for-translations). Если ваш тарифный план включает управление памятью переводов, администратор команды может сохранить её архив с помощью кнопки **Download as TMX file** в разделе **Team settings &gt; Translation memory**.

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

Сначала выполните [`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), будут сгенерированы новые переводы, которые перезапишут экспортированные файлы. Ключи, оставшиеся без перевода в Lokalise, General Translation переведёт при следующем изменении их исходного файла. Чтобы опубликовать эти переводы раньше, завершите их в Lokalise до экспорта.

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

Теперь достаточно запускать [`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), чтобы эти правки не потерялись.

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

Оставайтесь на Lokalise, если ваши нативные мобильные приложения зависят от обновления строк по воздуху (OTA), если дизайнеры работают с плагином для Figma и скриншотами, если вы заказываете профессиональный перевод прямо в том же инструменте или если ваш конвейер обменивается файлами XLIFF или ARB. (См. [Сравнение General Translation и Lokalise](/kb/general-translation-vs-lokalise).)

## Частые вопросы

### Не потеряю ли я проверенные переводы?

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

### Что будет со скриншотами?

Они остаются в Lokalise. Чтобы переводчики не потеряли информацию, которую давали скриншоты, опишите, где отображается каждая строка, в контексте соответствующего ключа (шаг 4).

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

* Экспортируйте по одному файлу на каждый язык и платформу с флагом `--export-empty-as skip`, выбрав тот формат множественного числа, который уже использует ваше приложение.
* Удалите вебхук, триггеры и Actions в Lokalise, прежде чем General Translation начнёт записывать те же файлы.
* Перед переводом импортируйте Glossary в контекстную группу и перенесите описания ключей в контекст соответствующих ключей.
* Выполните [`npx gt upload`](/docs/cli/reference/commands/upload) перед первым запуском [`npx gt translate`](/docs/cli/reference/commands/translate), а затем переводите новые тексты во время сборки или с помощью Locadex.

## Related questions

- [Альтернативы Lokalise: General Translation или Lokalise](https://generaltranslation.com/ru/kb/general-translation-vs-lokalise.mdx): General Translation — сильная альтернатива Lokalise для команд, которым нужен читаемый текст прямо в JSX и перевод, встроенный в процесс разработки. Lokalise построен вокруг общих ключей, интеграций с инструментами дизайна и OTA-доставки обновлений в мобильные приложения. General Translation генерирует переводы на основе размеченного контента приложения и позволяет проверять их в панели управления или в пул-реквестах GitHub.
- [Как мигрировать с Crowdin на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-crowdin.mdx): Сохраните файлы ресурсов, библиотеку интернационализации и проверенные переводы. Включите параметр Skip untranslated strings, скачайте переводы, запретите Git-интеграции Crowdin отправлять переводы и импортируйте файлы с помощью npx gt upload перед первым запуском npx gt translate. После этого General Translation будет переводить новые и изменённые строки во время сборки, используя ваш глоссарий из контекстной группы.
- [Как мигрировать с 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: [Как мигрировать с Crowdin на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-crowdin.mdx)
- Next question: [Как мигрировать с Phrase на General Translation?](https://generaltranslation.com/ru/kb/migrate-from-phrase.mdx)

## Sitemap

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