GitHub Actions

使用 GitHub Actions 和 Lingo.dev CI/CD 进行 AI 翻译

什么是 GitHub Actions?

GitHub Actions 是集成在 GitHub 中的 CI/CD 和自动化平台。用户可以通过 YAML 文件定义工作流,实现代码的构建、测试、部署或根据仓库事件自动执行任务。

什么是 Lingo.dev CI/CD?

Lingo.dev CI/CD 是一款基于 AI 的应用和内容本地化工具,适用于 CI/CD 流程,确保翻译始终保持最新。对于 GitHub,Lingo.dev 提供了专用的 GitHub Action,简化集成流程。

关于本指南

本指南介绍如何通过 Lingo.dev GitHub Action 和 Lingo.dev Engine 配置 Lingo.dev CI/CD

步骤 1. 配置 Lingo.dev CLI

首先,请按照 Lingo.dev CLI快速入门 操作。

完成后,您将获得:

  • 一个 Lingo.dev 的 API 密钥
  • 一个用于配置翻译流水线行为的 i18n.json 文件
  • 使用 npx lingo.dev@latest run 翻译内容的能力

步骤 2. 配置仓库密钥

  1. 进入 设置 > Secrets and variables > Actions
  2. 点击 新建仓库密钥
  3. 名称 字段中输入 LINGODOTDEV_API_KEY
  4. 密钥 字段中输入 Lingo.dev API 密钥。
  5. 点击 添加密钥

步骤 3. 选择工作流

您可以根据不同需求以多种方式配置 Lingo.dev CI/CD,以支持不同的工作流。以下是我们推荐并提供示例的几种工作流:

  • 当内容合并到 main 时,将翻译提交到 main
  • 当内容合并到 main 时,从 main 创建一个拉取请求
  • 当内容合并到功能分支时,将翻译提交到该分支
  • 当内容合并到功能分支时,从该分支创建一个拉取请求

但没有“最佳”工作流。每种方式都有其权衡。如果你不确定从哪里开始,建议先选择第一个选项。这是最简单、最隐蔽的工作流。

步骤 4. 设置工作流

  1. 在仓库中创建一个 .github/workflows 目录:

    mkdir -p .github/workflows
    

    请确保在 .github 的开头包含 .

  2. .github/workflows 目录下创建一个 YAML 文件:

    touch .github/workflows/translate.yml
    

    文件名无关紧要。

  3. 将其中一个 示例工作流 复制到该文件中。

  4. 如果工作流会创建拉取请求:

    1. 进入 Settings > Actions > General
    2. 启用 Allow GitHub Actions to create and approve pull requests
    3. 点击 Save
  5. 将更改提交并推送到 main 分支:

    git add  .github/workflows/translate.yml
    git commit -m "feat: GitHub action for Lingo.dev"
    git push
    

(可选)步骤 5. 自定义工作流

Lingo.dev CI/CD 提供了默认值,大多数情况下无需自定义。你可以通过向 GitHub Action 传递输入参数来覆盖这些默认值:

可用输入参数:

  • version:Lingo.dev CLI 版本(默认值:"latest"
  • api-key:Lingo.dev 平台 API Key(必填)
  • pull-request:是否创建包含更改的拉取请求(默认值:false
  • commit-message:自定义提交信息(默认值:"feat: update translations via @LingoDotDev"
  • pull-request-title:自定义拉取请求标题(默认值:"feat: update translations via @LingoDotDev"
  • commit-author-name:Git 提交作者名称(默认值:"Lingo.dev"
  • commit-author-email:Git 提交作者邮箱(默认值:"[email protected]"
  • working-directory:工作目录(默认值:"."
  • process-own-commits:处理由此 Action 创建的提交(默认值:false
  • parallel:并行模式运行(默认值:false

自定义输入参数示例:

- name: Lingo.dev
  uses: lingodotdev/lingo.dev@main
  with:
    api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
    commit-message: "My custom commit message!"
    parallel: true

示例工作流

提交到 main 分支

当内容合并到 main 时,将翻译提交到 main

name: Translate

on:
  push:
    branches: [main]

permissions:
  contents: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

在 GitHub 上查看

从 main 分支发起 pull request

当内容合并到 main 时,从 main 创建一个 pull request。

name: Translate

on:
  push:
    branches: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

在 GitHub 上查看

提交到功能分支

当内容合并到功能分支时,将翻译提交到该分支。

name: Translate

on:
  push:
    branches-ignore: [main]

permissions:
  contents: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}

在 Github 上查看

从功能分支发起 pull request

当内容合并到功能分支时,从该分支创建一个 pull request。

name: Translate

on:
  push:
    branches-ignore: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lingo.dev
        uses: lingodotdev/lingo.dev@main
        with:
          api-key: ${{ secrets.LINGODOTDEV_API_KEY }}
          pull-request: true
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

在 GitHub 上查看