Lingo.dev GitLab 集成
Lingo.dev GitLab CI/CD 集成 是一个安全的开源 CI/CD 集成工具,可自动本地化新内容并防止未完成的翻译进入生产环境。根据团队的工作流程需求,它可以创建合并请求或直接提交到分支。
它还通过重新基准化实现自动冲突解决,因此您的翻译可以与代码保持同步,无需人工干预。
该集成支持多种工作流程场景:
- 当内容更改被推送时,直接提交到分支;
- 针对翻译更新的分支创建合并请求。
完成本指南后,您将能够:
- 设置由代码推送触发的自动本地化;
- 使用存储库变量配置安全认证;
- 在直接提交和合并请求工作流程之间进行选择;
- 了解持续本地化如何融入您的现有流程。
让我们开始吧!
前置条件
存储库设置
您的存储库必须配置 Lingo.dev CLI 并包含有效的 i18n.json
文件。如果尚未完成此设置,请先完成 CLI 快速入门。
第 1 步:认证设置
Lingo.dev GitLab 集成 需要访问您的翻译引擎和存储库。认证通过存储库变量进行,以确保您的凭据安全。
添加您的 API 密钥
导航到存储库的 设置 → CI/CD → 变量,然后添加您的翻译引擎凭据:
对于原始 LLM API 用户:
- 变量名称:
OPENAI_API_KEY
或ANTHROPIC_API_KEY
- 变量值:来自相应提供商的 API 密钥
对于 Lingo.dev 引擎用户:
- 变量名称:
LINGODOTDEV_API_KEY
- 变量值:从 lingo.dev/app 获取的项目 API 密钥
添加 GitLab 访问令牌
为存储库操作创建一个自定义访问令牌:
- 转到 设置 → 访问令牌 → 添加新令牌
- 授予以下权限范围:
api
read_repository
write_repository
- 将令牌添加为存储库变量:
- 变量名称:
GL_TOKEN
- 变量值:您的 GitLab 访问令牌
- 变量名称:
重要提示: 默认的 CI 作业令牌不足以满足需求。您必须 创建自定义访问令牌,因为默认令牌缺少执行 git 操作所需的权限。
注意: 对于受保护的分支,请确保您的变量也被标记为受保护。未受保护的变量在受保护分支的管道中将无法访问。
第 2 步:创建工作流
创建或更新您的 .gitlab-ci.yml
文件,使用以下基本配置:
lingodotdev:
image: lingodotdev/ci-action:latest
script:
- echo "Done"
此配置使用最新的 Docker 镜像,并自动运行翻译引擎。
所需权限
GitLab CI/CD 需要访问存储库变量和 Git 操作:
存储库变量:
LINGODOTDEV_API_KEY
— Lingo.dev 引擎用户必需OPENAI_API_KEY
或ANTHROPIC_API_KEY
— 原始 LLM API 用户必需GL_TOKEN
— 必需用于 Git 推送操作和创建合并请求
访问令牌范围:
api
— 创建和管理合并请求read_repository
— 访问存储库内容write_repository
— 推送提交并创建分支
这些权限允许集成读取您的内容、生成翻译并使用本地化内容更新您的存储库。
第 3 步:选择您的工作流模式
Lingo.dev GitLab 集成 支持两种操作模式,具体取决于您的团队代码审查要求。
直接提交模式(默认)
集成将翻译直接提交到您的分支:
lingodotdev:
image: lingodotdev/ci-action:latest
script:
- echo "Done"
此模式最适合:
- 独立开发者或小型团队
- 在合并前需要审查的功能分支
- 不需要单独审查翻译更新的项目
合并请求模式
集成为翻译更新创建合并请求:
lingodotdev:
image: lingodotdev/ci-action:latest
variables:
LINGODOTDEV_PULL_REQUEST: "true"
script:
- echo "Done"
合并请求模式的必要设置
存储库变量:
LINGODOTDEV_API_KEY
和 GL_TOKEN
必须配置为存储库变量。
访问令牌要求:
您的 GL_TOKEN
必须包含 api
范围以创建和管理合并请求。
此模式最适合:
- 具有严格代码审查要求的团队
- 需要单独批准翻译更改的项目
- 需要对所有更改进行明确审查的工作流
第 4 步:工作流场景
Lingo.dev GitLab 集成 适应不同的开发工作流。了解这些场景有助于您为团队选择合适的配置。
场景 1:功能分支更新(直接提交)
触发条件: 推送到功能分支 操作: 将翻译更新直接提交到功能分支
lingodotdev:
image: lingodotdev/ci-action:latest
script:
- echo "Done"
rules:
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH = /^feat/
流程: 内容更改推送到功能分支 → 集成将翻译提交到同一分支
这使翻译更新保持在功能分支内,确保翻译与原始更改一起进行审查。
场景 2:更新的合并请求(合并请求模式)
触发条件: 推送到任何配置的分支 操作: 创建包含翻译更新的合并请求
lingodotdev:
image: lingodotdev/ci-action:latest
variables:
LINGODOTDEV_API_KEY: $MY_LINGODOTDEV_API_KEY # 或 OPENAI_API_KEY/ANTHROPIC_API_KEY
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
script:
- echo "Done"
流程: 内容更改推送到分支 → 集成创建包含翻译的合并请求
这为翻译更新维护了单独的审查流程。
高级配置
通过额外的变量自定义集成行为:
使用 Lingo.dev 引擎的示例:
lingodotdev:
image: lingodotdev/ci-action:latest
variables:
LINGODOTDEV_API_KEY: $MY_LINGODOTDEV_API_KEY
GL_TOKEN: $MY_GL_TOKEN
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations via @lingodotdev"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
script:
- echo "Done"
rules:
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH = /^feat/
使用原始 LLM API 的示例:
lingodotdev:
image: lingodotdev/ci-action:latest
variables:
OPENAI_API_KEY: $MY_OPENAI_API_KEY # 或 ANTHROPIC_API_KEY
GL_TOKEN: $MY_GL_TOKEN
LINGODOTDEV_PULL_REQUEST: "true"
LINGODOTDEV_PULL_REQUEST_TITLE: "feat: update translations"
LINGODOTDEV_COMMIT_MESSAGE: "feat: update translations via @lingodotdev"
LINGODOTDEV_WORKING_DIRECTORY: "apps/web"
LINGODOTDEV_PROCESS_OWN_COMMITS: "true"
script:
- echo "Done"
rules:
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH = /^feat/
配置选项:
LINGODOTDEV_API_KEY
— 如果您使用的是 Lingo.dev 引擎,这是您的 Lingo.dev 引擎 API 密钥OPENAI_API_KEY
— 如果您使用的是原始 LLM API,这是您的 OpenAI API 密钥ANTHROPIC_API_KEY
— 如果您使用的是原始 LLM API,这是您的 Anthropic API 密钥LINGODOTDEV_PULL_REQUEST
— 创建合并请求而不是直接提交(默认值:false
)LINGODOTDEV_PULL_REQUEST_TITLE
— 自定义合并请求标题(默认值:feat: update translations via @lingodotdev
)LINGODOTDEV_COMMIT_MESSAGE
— 自定义提交消息(默认值:feat: update translations via @lingodotdev
)LINGODOTDEV_WORKING_DIRECTORY
— 在子目录中运行集成(默认值:.
)LINGODOTDEV_PROCESS_OWN_COMMITS
— 处理由此集成生成的提交(默认值:false
)
故障排除
常见错误及其解决方案:
错误 | 解决方案 |
---|---|
remote: HTTP Basic: Access denied | 在您的 CI/CD 设置中添加 GL_TOKEN 变量 |
GitbeakerRequestError: Forbidden | 您的 GitLab 令牌缺少 api 范围 |