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

Локализация

  • Обзор
  • API локализации
  • Локализация веб-приложений
  • Локализация мобильных приложений
  • iOS и String Catalogs
  • Android и strings.xml
  • Локализация email-писем
  • Статический контент, например .md и .json
  • Next.js с Markdoc
  • Rails с i18n

Процессы

  • Настройка движка с MCP
  • Jira Triage
  • CI/CD

Рабочие процессы локализации в CI/CD

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:

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

yaml
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 завершится с ненулевым статусом.

bash
npx lingo.dev@latest run --frozen

Добавьте это как отдельный шаг пайплайна перед деплоем:

yaml
- name: Verify translations
  run: npx lingo.dev@latest run --frozen

Рабочие процессы для монорепозиториев#

Если у вас монорепозиторий с несколькими пакетами и у каждого свои файлы переводов, используйте опцию working-directory, чтобы запускать перевод только для нужных пакетов:

yaml
- 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, завершите слияние и сгенерируйте его заново:

bash
git merge feature-branch
rm i18n.lock
git add .
git merge --continue
npx lingo.dev@latest lockfile --force

Команда lockfile --force пересобирает lockfile по текущему состоянию исходных файлов без запуска новых переводов. Подробнее о стратегиях разрешения конфликтов через rebase и их предотвращении — в руководстве по продвинутым сценариям интеграции.

Что дальше#

GitHub App
Управляемая непрерывная локализация в GitHub — без runner, секретов и lockfile
GitHub Actions
Полная настройка GitHub Actions с подписью GPG и гибкой конфигурацией
GitLab CI
Полная настройка GitLab CI/CD с access token и merge request
Bitbucket Pipelines
Полная настройка Bitbucket Pipelines с pipe и pull request
Продвинутые сценарии
Выбор рабочего процесса, разрешение конфликтов и стопперы перед деплоем

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

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