发布前检查翻译
在本机运行,无需密钥且不发送任何数据。检测丢失变量如 {name}、数字变更、缺失键和空行。发现错误时退出码为 1,CI 可据此阻止合并;空行只是警告,只有加上 --strict 才会得到退出码 1。
npx kaeris check --source en.json --langs de
无需 Python:npx 在 Node 18 及以上版本运行 npm 包。用 Python 的话,pip install kaeris 提供同样的 kaeris check 命令。
{
"greeting": "Hallo!",
"delete": "50 Dateien löschen",
"save": "",
"terms": "Lies unsere <b>AGB</b>"
}
✗ de: 1 placeholder mismatch(es): greeting: missing ['{name}'], added - ✗ de: 3 translation fault(s): greeting: lost placeholder {name} delete: number 50 appears in the translation but not the source delete: number 5 from the source is missing or changed in the translation ! de: 1 warning(s): save: empty translation — the source has text ✗ 1 placeholder mismatch, 3 translation faults
源文件:{"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}
| 标志 | 含义 |
|---|---|
--strict | 对警告(例如空译文)以及源文件中没有的多余键也报错。 |
--pattern '{lang}/common.json' | 翻译文件所在。默认:translate 写出的位置,即源文件旁(de.json, app_de.arb, values-de/strings.xml)。 |
--json | 输出机器可读结果而非报告。 |
--sarif kaeris.sarif | 同时生成适用于 GitHub 的 SARIF 2.1.0 报告,详见下文。 |
源文件:13 种格式中的任意一种(JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent)。退出码:0 无异常,1 发现问题,2 用法错误或文件无法读取。
按格式的指南: JSON · YAML · PO · XLIFF · ARB · .strings · .xcstrings · Fluent · .properties · .resx · CSV · Markdown · Android XML
CI recipes (in English): GitHub Actions · GitLab CI · pre-commit · Make and npm scripts
术语表:每个术语在每种语言中只用一个译法
--keep 让单词保持原样。如果术语需要翻译、但每次都要译成同一个词,就把它写进与 kaeris.json 同目录的 kaeris-glossary.json。translate 会把约定的译法交给模型,check 会让用了其他词的翻译不通过。
{"terms": [
{"term": "workspace", "pos": "noun",
"note": "the shared project area, not a desk",
"translations": {"de": "Arbeitsbereich",
"fr": "espace de travail",
"ru": "рабочее пространство"}},
{"term": "KAERIS", "keep": true}
]}
→ Glossary: 1 term(s), 1 kept as is ✗ fr: 1 translation fault(s): open: glossary: "workspace" should be "espace de travail" ! ru: 1 warning(s): leave: glossary: "workspace" should be "рабочее пространство" — not found, not even as an inflected form; check this line ✗ 1 translation fault
源文件:{"open": "Open the workspace", "leave": "Leave the workspace"}。法语译文用了“bureau”,俄语译文用了“рабочей области”。
术语按完整单词计算:Pro 不会在“product”中被找到。约定译法的屈折形式可以通过。在词形会变化或会组成复合词的语言中(俄语、波兰语、德语等),找不到只算警告而不是错误,因为那仍可能是正确的语法。用单词列表可以列出允许的变体。所有方案均可使用,包括免费演示。
在 pull request 中定位到行的发现
使用 --sarif 时,每个发现都会变为语言文件对应行的备注,置于审查者评论旁。
- uses: kaeris-io/kaeris-action@v1
with:
mode: check
source: locales/en.json
languages: de,fr,es
sarif-file: kaeris.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: kaeris.sarif
"greeting": "Hallo, {name}!",
- "delete": "5 Dateien löschen",+ "delete": "50 Dateien löschen",KAERIS i18n · delete: number 5 from the source is missing or changed in the translation "save": "Änderungen speichern"
报告即使在无错误时也会生成,因为 upload-sarif 在文件缺失时会失败。公共仓库的行备注免费;私有仓库需 GitHub Advanced Security。无此功能时检查仍有效:作业失败且日志列出所有发现。
KAERIS 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文