|
Документация
Заказать демоПлатформа
ПлатформаMCPCLIAPIПроцессы
РуководстваЖурнал изменений

Непрерывная локализация

  • Как это работает
  • Настройка

Платформы

  • GitHub App
  • GitHub Actions
  • GitLab CI/CD
  • Bitbucket Pipelines
  • Продвинутые сценарии

Продвинутые сценарии

Продвинутые сценарии локализации в CI/CD: выбор рабочего процесса, проверка полноты переводов и разрешение merge-конфликтов.

Выбор рабочего процесса#

Четыре сценария рабочего процесса подходят для большинства команд. У каждого — свои компромиссы в плане автоматизации, объёма проверки и чистоты истории веток.

Рабочий процессЛучше всего подходит дляКомпромисс
Коммит в mainНебольших команд и быстрых обновлений без лишних шаговНет отдельного этапа проверки переводов
PR из mainКоманд, которым важно проверять переводыТребуется ручное одобрение PR
Коммит в feature-веткуДолгоживущих feature-ветокКоммиты с переводами остаются в истории ветки
PR из feature-веткиМаксимального контроля на уровне каждой фичиДля каждой фичи приходится вести несколько PR

Если сомневаетесь, начните с варианта "Коммит в main". Это самый простой рабочий процесс, и он полностью исключает merge-конфликты, потому что ветки не расходятся.

Проверка полноты переводов#

Флаг --frozen проверяет, что переведён весь контент, не создавая новых переводов. Если чего-то не хватает, команда завершается с ненулевым кодом:

bash
npx lingo.dev@latest run --frozen

Используйте это как барьер деплоя, чтобы не выкатывать непереведённый контент.

yaml
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#

1

Начните merge

bash
git merge <branch-name>
2

Удалите конфликтующий lockfile

bash
rm i18n.lock
3

Завершите merge

bash
git add .
git merge --continue
4

Сгенерируйте lockfile заново

bash
npx lingo.dev@latest lockfile --force

Так lockfile будет пересобран по текущему состоянию исходных файлов без запуска новых переводов.

Разрешение через rebase#

Тот же подход работает и с rebase: удаляйте i18n.lock на каждом шаге, где возникает конфликт, продолжайте rebase, а в конце заново сгенерируйте lockfile:

bash
git rebase <branch-name>
# On each conflict: rm i18n.lock && git add . && git rebase --continue
npx lingo.dev@latest lockfile --force

Что дальше#

GitHub Actions
Настройте официальный GitHub Action
i18n.lock
Как lockfile отслеживает состояние переводов
Как это работает
Как устроен CI/CD-конвейер локализации
Настройка
Настройте CI/CD для своего проекта

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 4 месяца назад·2 минуты чтения