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

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. Отслеживание прогресса — Отображает прогресс выполнения задач в реальном времени для всех рабочих процессов

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

// Проект с 50 файлами на 10 языках = 500 задач перевода
{
  "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 --locale es --locale fr

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

npx lingo.dev@latest run --bucket json

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

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

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

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

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

Пример рабочего процесса 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 }}

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

Рабочий процесс на основе веток

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

Создание ветки для перевода:

git checkout main
git checkout -b localize/content-update

# Внесите изменения в контент

git push -u origin localize/content-update

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

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

Этот подход обеспечивает чёткое разделение между изменениями контента и процессом перевода.

Учет производительности

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

  • Параллельная обработка использует больше ресурсов процессора и памяти
  • Следите за производительностью системы при высоких настройках параллелизма
  • Облачные 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/           # Контент приложения
  marketing/             # Маркетинговый контент
  docs/                  # Документация
  i18n.json             # Конфигурация
  i18n.lock             # Отслеживание контента

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

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

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

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

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

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

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

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