Продвинутые сценарии локализации в CI/CD: выбор рабочего процесса, проверка полноты переводов и разрешение merge-конфликтов.
Выбор рабочего процесса#
Четыре сценария рабочего процесса подходят для большинства команд. У каждого — свои компромиссы в плане автоматизации, объёма проверки и чистоты истории веток.
| Рабочий процесс | Лучше всего подходит для | Компромисс |
|---|---|---|
| Коммит в main | Небольших команд и быстрых обновлений без лишних шагов | Нет отдельного этапа проверки переводов |
| PR из main | Команд, которым важно проверять переводы | Требуется ручное одобрение PR |
| Коммит в feature-ветку | Долгоживущих feature-веток | Коммиты с переводами остаются в истории ветки |
| PR из feature-ветки | Максимального контроля на уровне каждой фичи | Для каждой фичи приходится вести несколько PR |
Если сомневаетесь, начните с варианта "Коммит в main". Это самый простой рабочий процесс, и он полностью исключает merge-конфликты, потому что ветки не расходятся.
Проверка полноты переводов#
Флаг --frozen проверяет, что переведён весь контент, не создавая новых переводов. Если чего-то не хватает, команда завершается с ненулевым кодом:
npx lingo.dev@latest run --frozenИспользуйте это как барьер деплоя, чтобы не выкатывать непереведённый контент.
name: Check translations
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx lingo.dev@latest run --frozenРазрешение merge-конфликтов#
Merge-конфликты возникают, когда файл i18n.lock расходится между ветками — обычно если переводы независимо обновлялись в разных ветках.
Как предотвратить#
Если коммитить переводы напрямую в main (а не вести их через feature-ветки), конфликтов lockfile можно избежать полностью.
Разрешение через merge#
Начните merge
git merge <branch-name>Удалите конфликтующий lockfile
rm i18n.lockЗавершите merge
git add .
git merge --continueСгенерируйте lockfile заново
npx lingo.dev@latest lockfile --forceТак lockfile будет пересобран по текущему состоянию исходных файлов без запуска новых переводов.
Разрешение через rebase#
Тот же подход работает и с rebase: удаляйте i18n.lock на каждом шаге, где возникает конфликт, продолжайте rebase, а в конце заново сгенерируйте lockfile:
git rebase <branch-name>
# On each conflict: rm i18n.lock && git add . && git rebase --continue
npx lingo.dev@latest lockfile --force