Крупные проекты
Lingo.dev CLI предлагает оптимизацию производительности и стратегии рабочего процесса для масштабных проектов локализации с сотнями тысяч ключей перевода, несколькими языками и сложной структурой контента.
Для проектов с большим объёмом контента CLI поддерживает параллельную обработку и интеграцию с CI/CD, чтобы эффективно справляться с переводом в больших масштабах.
Параллельная обработка
Lingo.dev CLI ускоряет работу с крупными проектами с помощью параллельных воркеров, которые одновременно обрабатывают несколько задач перевода.
Включить параллельную обработку:
npx lingo.dev@latest run
Это распределяет задачи перевода между несколькими воркерами, что значительно сокращает время обработки крупных проектов.
Управление количеством воркеров:
npx lingo.dev@latest run --concurrency 16
По умолчанию используется 10 воркеров. Более высокие значения позволяют обрабатывать больше задач одновременно, но могут привести к превышению лимитов API.
Как работает параллельная обработка
CLI создаёт пул воркеров, которые обрабатывают задачи перевода параллельно, предотвращая повреждение файлов:
- Распределение задач — разбивает локализацию на отдельные задачи по языкам и файлам
- Назначение воркеров — распределяет задачи между доступными воркерами с помощью балансировки нагрузки
- Предотвращение гонок — использует блокировки файловой системы для предотвращения конфликтов при одновременном доступе к одним и тем же файлам
- Отслеживание прогресса — отображает прогресс в реальном времени по всем воркерам
Пример для крупных проектов:
// 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:
- Перейдите на вкладку Actions в репозитории
- Выберите workflow "Lingo.dev Localization"
- Запустите workflow на вашей ветке перевода
- Проверьте и объедините переведённый контент
Такой подход чётко разделяет изменения контента и процесс перевода.
Вопросы производительности
Системные ресурсы:
- Параллельная обработка использует больше 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'ы для тяжёлых задач
- Следите за временем обработки и оптимизируйте конфигурацию групп