Крупные проекты

Lingo.dev CLI предлагает оптимизацию производительности и стратегии рабочего процесса для масштабных проектов локализации с сотнями тысяч ключей перевода, несколькими языками и сложной структурой контента.

Для проектов с большим объёмом контента CLI поддерживает параллельную обработку и интеграцию с CI/CD, чтобы эффективно справляться с переводом в больших масштабах.

Параллельная обработка

Lingo.dev CLI ускоряет работу с крупными проектами с помощью параллельных воркеров, которые одновременно обрабатывают несколько задач перевода.

Включить параллельную обработку:

npx lingo.dev@latest run

Это распределяет задачи перевода между несколькими воркерами, что значительно сокращает время обработки крупных проектов.

Управление количеством воркеров:

npx lingo.dev@latest run --concurrency 16

По умолчанию используется 10 воркеров. Более высокие значения позволяют обрабатывать больше задач одновременно, но могут привести к превышению лимитов API.

Как работает параллельная обработка

CLI создаёт пул воркеров, которые обрабатывают задачи перевода параллельно, предотвращая повреждение файлов:

  1. Распределение задач — разбивает локализацию на отдельные задачи по языкам и файлам
  2. Назначение воркеров — распределяет задачи между доступными воркерами с помощью балансировки нагрузки
  3. Предотвращение гонок — использует блокировки файловой системы для предотвращения конфликтов при одновременном доступе к одним и тем же файлам
  4. Отслеживание прогресса — отображает прогресс в реальном времени по всем воркерам

Пример для крупных проектов:

// Project with 50 files across 10 languages = 500 translation tasks
{
  "locale": {
    "source": "en",
    "targets": ["es", "fr", "de", "ja", "zh", "ko", "pt", "it", "ru", "ar"]
  },
  "buckets": {
    "json": {
      "include": ["src/locales/[locale]/*.json"]
    },
    "markdown": {
      "include": ["docs/[locale]/*.md"]
    }
  }
}

С параллельной обработкой эти 500 задач распределяются между воркерами, а не выполняются последовательно.

Таргетированная обработка

В крупных проектах можно обрабатывать отдельные части, а не всё сразу:

Обработка отдельных языков:

npx lingo.dev@latest run --target-locale es --target-locale fr

Обработка отдельных типов файлов:

npx lingo.dev@latest run --bucket json

Обработка отдельных файлов:

npx lingo.dev@latest run --file components/header

Этот выборочный процессинг полезен для поэтапных обновлений во время разработки.

Интеграция с CI/CD

Крупные проекты выигрывают от автоматизированных переводческих процессов с помощью GitHub Actions или других CI/CD-систем.

Workflow для GitHub Actions:

name: Lingo.dev Localization
on:
  workflow_dispatch:
permissions:
  contents: write
  pull-requests: write
jobs:
  localize:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

Этот workflow обрабатывает переводы в отдельных ветках, чтобы перевод не мешал разработке.

Работа с ветками

Для крупных проектов используйте отдельные ветки для перевода:

Создайте ветку для перевода:

git checkout main
git checkout -b localize/content-update
# Make content changes
git push -u origin localize/content-update

Запустите перевод через GitHub Actions:

  1. Перейдите на вкладку Actions в репозитории
  2. Выберите workflow "Lingo.dev Localization"
  3. Запустите workflow на вашей ветке перевода
  4. Проверьте и объедините переведённый контент

Такой подход чётко разделяет изменения контента и процесс перевода.

Вопросы производительности

Системные ресурсы:

  • Параллельная обработка использует больше CPU и памяти
  • Следите за производительностью системы при высокой нагрузке
  • Облачные CI/CD-раннеры эффективно справляются с параллельными задачами

Ограничения API:

  • При высокой параллельности может сработать лимит запросов
  • Начните с настроек по умолчанию и корректируйте по ситуации
  • Движок Lingo.dev сам управляет лимитами

Файловая система:

  • В больших проектах создаётся много файлов перевода
  • Добавьте временные файлы в .gitignore, если нужно
  • Зафиксируйте файл i18n.lock для отслеживания контента

Организация проекта

Разделение бакетов:

{
  "buckets": {
    "app": {
      "include": ["src/locales/[locale].json"]
    },
    "marketing": {
      "include": ["marketing/[locale]/*.json"]
    },
    "docs": {
      "include": ["docs/[locale]/*.md"]
    }
  }
}

Отдельные бакеты позволяют обрабатывать разные части контента по отдельности.

Структура файлов:

project/
  src/locales/           # Application content
  marketing/             # Marketing content
  docs/                  # Documentation
  i18n.json             # Configuration
  i18n.lock             # Content tracking

Организованная структура помогает управлять большими проектами и позволяет избирательно обрабатывать контент.

Стратегии масштабирования

Инкрементальная обработка:

  • Используйте lockfile, чтобы обрабатывать только изменённый контент
  • Обновляйте только нужные языки или группы
  • Интегрируйте с CI/CD для автоматических инкрементальных обновлений

Командные рабочие процессы:

  • Используйте перевод на отдельных ветках для совместной работы
  • Разделяйте изменения контента и перевод
  • Проверяйте переводы перед слиянием в продакшн

Оптимизация ресурсов:

  • Настраивайте параллельность в зависимости от возможностей системы
  • Используйте облачные runner'ы для тяжёлых задач
  • Следите за временем обработки и оптимизируйте конфигурацию групп