CLI Lingo.dev работает в любой CI/CD-среде с Node.js. Добавьте его как шаг в пайплайн, чтобы запускать перевод при каждом push — lockfile гарантирует, что обрабатываются только изменённые строки, поэтому переводы остаются быстрыми и экономичными даже по мере роста проекта.
Работаете в GitHub? Есть два варианта запуска
GitHub App — самый простой вариант для GitHub: установите один раз, и приложение будет автоматически реагировать на push и pull request. Не нужны runner, секрет с API-ключом и lockfile; репозиторий настраивается с помощью .lingo/config.json и engineId.
GitHub Action и другие интеграции ниже запускают CLI прямо в вашем пайплайне, используя i18n.json, i18n.lock lockfile и секрет LINGODOTDEV_API_KEY. Этот вариант подойдёт, если вы хотите запускать перевод вместе с другими шагами CI или не используете GitHub.
Дальше в этом руководстве мы разберём GitHub Action и CLI.
Как это работает#
В пайплайне CI/CD CLI запускается как шаг после checkout. CLI считывает конфигурацию из i18n.json, сравнивает исходные файлы с lockfile, чтобы определить изменения, переводит дельту через настроенный движок локализации и записывает результат в файлы целевых локалей. После этого пайплайн либо коммитит переведённые файлы, либо открывает pull request — в зависимости от выбранного рабочего процесса.
Выберите подходящий рабочий процесс#
Эти четыре сценария покрывают большинство командных процессов. Начните с самого простого и переходите к более продвинутым по мере роста команды.
| Рабочий процесс | Как это работает | Лучше всего подходит для | Компромисс |
|---|---|---|---|
| Коммит в main | Переводит и коммитит напрямую в main | Небольших команд, минимум трения | Без этапа проверки переводов |
| PR из main | Переводит и открывает PR на проверку | Команд, где переводы проходят проверку | Требуется вручную одобрять PR |
| Коммит в feature-ветку | Переводит при push в feature-ветку | Долгоживущих feature-веток | Коммиты с переводами попадают в историю ветки |
| PR из feature-ветки | Переводит и открывает PR из feature-ветки | Максимального контроля на уровне каждой фичи | Несколько PR на одну фичу |
С чего лучше начать
В большинстве команд хорошо работает вариант с коммитом в main. Переводы попадают в релиз с каждым push, lockfile поддерживает консистентность, а правила глоссария и тональности бренда в движке локализации отвечают за качество. Переходите к сценариям с PR, когда понадобится человеческая проверка переводов.
Быстрая настройка#
Сохраните API-ключ Lingo.dev как секрет CI/CD, а затем добавьте шаг перевода в свой пайплайн.
Lingo.dev предлагает официальный GitHub Action, который берёт на себя checkout, перевод и создание коммита или PR.
Не хотите управлять workflow-файлом, секретом с API-ключом или lockfile? GitHub App обеспечивает непрерывную локализацию в GitHub без всего этого — достаточно один раз установить приложение и настроить .lingo/config.json.
Коммит в main:
name: Translate
on:
push:
branches: [main]
permissions:
contents: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}PR из main — добавьте pull-request: true и GH_TOKEN:
name: Translate
on:
push:
branches: [main]
permissions:
contents: write
pull-requests: write
jobs:
translate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
pull-request: true
env:
GH_TOKEN: ${{ github.token }}Полное руководство по интеграции GitHub Actions охватывает рабочие процессы для feature-веток, пользовательские сообщения коммитов, поддержку монорепозиториев и подпись GPG.
Проверка переводов#
Флаг --frozen и lockfile используются в GitHub Action и CLI. GitHub App отслеживает состояние переводов на стороне сервера и не использует ни lockfile, ни эквивалент --frozen.
Используйте флаг --frozen как стоппер перед деплоем, чтобы в production не попадал непереведённый контент. Если какие-либо строки требуют перевода, CLI завершится с ненулевым статусом.
npx lingo.dev@latest run --frozenДобавьте это как отдельный шаг пайплайна перед деплоем:
- name: Verify translations
run: npx lingo.dev@latest run --frozenРабочие процессы для монорепозиториев#
Если у вас монорепозиторий с несколькими пакетами и у каждого свои файлы переводов, используйте опцию working-directory, чтобы запускать перевод только для нужных пакетов:
- uses: lingodotdev/lingo.dev@main
with:
api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
working-directory: apps/webКонфликты слияния#
Это относится к GitHub Action и CLI. GitHub App не использует lockfile, поэтому и конфликтов i18n.lock, которые нужно разрешать, здесь не бывает.
Lockfile (i18n.lock) может вызвать конфликт при слиянии веток с изменениями в переводах. Решение простое: удалите конфликтующий lockfile, завершите слияние и сгенерируйте его заново:
git merge feature-branch
rm i18n.lock
git add .
git merge --continue
npx lingo.dev@latest lockfile --forceКоманда lockfile --force пересобирает lockfile по текущему состоянию исходных файлов без запуска новых переводов. Подробнее о стратегиях разрешения конфликтов через rebase и их предотвращении — в руководстве по продвинутым сценариям интеграции.
