大型项目

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. 审核并合并翻译内容

这种方法清晰地将内容更改与翻译处理分开。

性能考量

系统资源:

  • 并行处理会占用更多的 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/           # 应用程序内容
  marketing/             # 营销内容
  docs/                  # 文档
  i18n.json             # 配置文件
  i18n.lock             # 内容跟踪

有组织的结构使大型项目易于管理,并支持选择性处理。

扩展策略

增量处理:

  • 使用锁文件仅处理更改的内容
  • 根据需要更新特定语言或存储桶
  • 结合 CI/CD 实现自动增量更新

团队工作流程:

  • 使用基于分支的翻译进行协作
  • 将内容更改与翻译工作分离
  • 在合并到生产环境之前审查翻译

资源优化:

  • 根据系统能力调整并发性
  • 对于繁重的处理工作负载,使用云运行器
  • 监控处理时间并优化存储桶配置