使用 Cursor CLI 自动管理国际化翻译键值。这个工作流会检测 Pull Request 中新增或修改的 i18n 键值,并补充缺失的翻译内容,同时不会覆盖已有的翻译。
name: Auto Translate Keys

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

permissions:
  contents: write
  pull-requests: write

jobs:
  i18n:
    if: ${{ !startsWith(github.head_ref, 'translate/') }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Propose i18n updates
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: translate
        run: |
          cursor-agent -p "你正在 GitHub Actions 运行环境中操作。

          GitHub CLI 可通过 `gh` 命令使用,并通过 `GH_TOKEN` 进行身份验证。Git 工具可用。你拥有代码仓库内容的写入权限,可以对 Pull Request 进行评论,但不能直接创建或编辑 PR。

          # 上下文信息:
          - 仓库:${{ github.repository }}
          - PR 编号:${{ github.event.pull_request.number }}
          - Head Ref:${{ github.head_ref }}
          - 翻译分支前缀:${{ env.BRANCH_PREFIX }}

          # 目标:
          - 检测 PR 中新增或修改的 i18n 键值,并仅补充消息文件中缺失的语言版本。绝不覆盖现有翻译。

          # 要求:
          1) 通过检查 PR 差异(源文件和消息文件)确定变更的键值。
          2) 以源语言/标准语言环境为准,计算每个语言环境缺失的键值。
          3) 仅为缺失的键值添加条目。保持所有现有值不变。
          4) 验证 JSON 格式和结构。
          5) 使用上下文中的翻译分支前缀为此 PR head 维护一个持久的翻译分支。如果不存在则创建,否则更新,并将变更推送到 origin。
          6) 在原始 PR 上发布或更新一条自然语言 PR 评论(1-2 句话),简要说明更新了什么以及原因,并包含一个内联对比链接以快速创建 PR。
          7) 避免重复评论;如果存在之前的机器人评论,则更新它。
          8) 如果无需变更,则不进行提交且不发布评论。

          # 输入和约定:
          - 使用 `gh pr diff` 和 git 历史记录来检测变更。

          # 发生更新时的交付物:
          - 推送到此 PR head 的持久翻译分支的提交。
          - 在原始 PR 上发布一条自然语言 PR 评论,包含上述对比链接。
          " --force --model "$MODEL" --output-format=text