翻译

在 GitLab CI 中检查翻译

该作业安装 kaeris 包,并在修改了区域设置文件的合并请求上运行 kaeris check。丢失的占位符或缺失的键会使管道失败。它是离线且免费的:无需 API 密钥,无需账户。

KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文

配置

该作业

将其添加到 .gitlab-ci.yml。将 --source 更改为你的基础语言文件,将 --langs 更改为你发布的区域设置。rules 块仅在修改了 locales/ 下内容的合并请求上运行作业;删除 changes 行可在每个合并请求上运行它。

配置.gitlab-ci.yml
i18n-check:
  stage: test
  image: python:3.12-slim
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      changes:
        - locales/**/*
  script:
    - pip install kaeris
    - kaeris check --source locales/en.json --langs de,fr --ci

实际运行时打印的内容

kaeris 0.2.35 的输出,捕获于 27 October 2026。每个框的最后一行是 CI 作业看到的退出代码。

作业打印的内容

按顺序运行的两个 script 行。左侧:正常的文件。右侧:de.json 文件,其中包含 {nam} 而不是 {name},并且 checkout 键丢失;作业以退出代码 1 停止。

正常的文件job log
$ pip install kaeris
Collecting kaeris
  Using cached kaeris-0.2.35-py3-none-any.whl.metadata (26 kB)
Using cached kaeris-0.2.35-py3-none-any.whl (131 kB)
Installing collected packages: kaeris
Successfully installed kaeris-0.2.35

$ kaeris check --source locales/en.json --langs de,fr --ci
✓ de: complete & placeholder-safe
✓ fr: complete & placeholder-safe
✓ all locales complete & placeholder-safe
Job succeeded
exit code: 0
损坏的翻译job log
$ pip install kaeris
Requirement already satisfied: kaeris in C:\Users\Inzagi\AppData\Local\Temp\claude\C--Users-Inzagi-projects-kaeris\bfeebe69-3cfd-4f28-bbe7-e5600be082b9\scratchpad\venv-gl2\Lib\site-packages (0.2.35)

$ kaeris check --source locales/en.json --langs de,fr --ci
✗ de: 1 missing key(s): checkout
✗ de: 1 placeholder mismatch(es):
    greeting: missing ['{name}'], added ['{nam}']
✗ de: 2 translation fault(s):
    greeting: lost placeholder {name}
    greeting: invented placeholder {nam} (not in source)
✓ fr: complete & placeholder-safe
✗ 1 missing key, 1 placeholder mismatch, 2 translation faults
ERROR: Job failed: exit code 1
exit code: 1

分三步设置

  1. 添加任务

    将任务粘贴到 .gitlab-ci.yml 中,并设置您自己的 --source 和 --langs。

  2. 打开合并请求

    在一个分支上更改区域设置文件并打开一个合并请求。任务将运行并显示其日志中的所有发现。

  3. 要求流水线成功

    在项目设置的合并请求下,启用流水线必须成功。然后,一个红色的任务将阻止合并。

我们是如何检查的

页面上的每个命令在编写之前都已运行。未运行的命令也列出了。

值得了解的选项

问题

是否需要 API 密钥或账户?

否。kaeris check 在其帮助文档中被描述为静态、本地且无 API 的,因此该作业不需要密钥。翻译是一个单独的命令,需要密钥。

检查会捕获什么?

丢失或多余的占位符({name}、%s、{{x}}、ICU 复数形式),缺少密钥以及不存在的区域设置文件。比较是本地的、静态的。 它检查什么,以及所有标志

我可以将结果保存为文件吗?

是的:--json 以 JSON 格式打印结果,--sarif PATH 写入 SARIF 报告。如果您想保留它,请将其添加到 artifacts 下。这两个标志都在 kaeris check 的帮助中;我们没有在 GitLab 上运行工件上传。

继续

其他配置示例:GitHub Actions · pre-commit · Make 和 npm 脚本

CLI 参考 · 检查参考 · GitHub Action 参考 · 浏览器中的免费检查 · 浏览器中的翻译