CI/CD 本地化高级实践:工作流选择、翻译完整性校验,以及合并冲突处理。
选择工作流#
四种工作流模式基本覆盖了大多数团队的协作场景。它们在自动化程度、审核成本和分支管理整洁性上各有取舍。
| 工作流 | 适用场景 | 取舍 |
|---|---|---|
| 直接提交到 main | 小团队,追求低阻力更新 | 翻译缺少审核环节 |
| 从 main 发起 PR | 希望审核翻译内容的团队 | 需要手动审批 PR |
| 提交到功能分支 | 长期维护的功能分支 | 翻译提交会保留在分支历史中 |
| 从功能分支发起 PR | 希望按功能获得最大控制力 | 每个功能都要管理多个 PR |
在 GitHub 上,Lingo.dev GitHub App 会在服务端帮你处理这类场景中的大部分工作——它会响应 push 和 PR、自动回提交译文,而且不需要 runner 或 secret。如果你是在自己的流水线中运行本地化,再使用下面这些 CLI 模式即可。
如果不确定该选哪种,建议先从“直接提交到 main”开始。它最简单,而且由于没有分支分叉,能彻底避免合并冲突。
检查翻译完整性#
lingo check 命令会在不生成新译文的前提下,检查所有内容是否都已完成翻译。只要有任何内容缺失,它就会以非零状态码退出:
bash
lingo check你可以把它作为部署门禁,避免未翻译内容被发布出去。用 npm install -g @lingo.dev/cli 安装 CLI(Node 22+),并通过 LINGO_API_KEY 环境变量为 runner 完成身份验证。
yaml
name: Check translations
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
- run: npm install -g @lingo.dev/cli
- run: lingo check
env:
LINGO_API_KEY: ${{ secrets.LINGO_API_KEY }}解决合并冲突#
当分支之间的 .lingo/lock.json 文件出现分叉时,就会产生合并冲突——通常是因为不同分支分别独立更新了翻译。
如何预防#
将翻译直接提交到 main(而不是通过功能分支处理翻译),可以彻底消除 lockfile 冲突。
通过 merge 解决#
1
开始合并
bash
git merge <branch-name>2
删除发生冲突的 lockfile
bash
rm .lingo/lock.json3
完成合并
bash
git add .
git merge --continue4
重新生成 lockfile
bash
lingo push运行 lingo push 时,会在正常同步流程中根据当前源文件状态重新构建 .lingo/lock.json。
通过 rebase 解决#
同样的方法也适用于 rebase——在每次处理冲突时删除 .lingo/lock.json,继续 rebase,最后再运行 lingo push 重新生成 lockfile:
bash
git rebase <branch-name>
# On each conflict: rm .lingo/lock.json && git add . && git rebase --continue
lingo push