翻译

发布前检查翻译

在本机运行,无需密钥且不发送任何数据。检测丢失变量如 {name}、数字变更、缺失键和空行。发现错误时退出码为 1,CI 可据此阻止合并;空行只是警告,只有加上 --strict 才会得到退出码 1。

运行
npx kaeris check --source en.json --langs de

无需 Python:npx 在 Node 18 及以上版本运行 npm 包。用 Python 的话,pip install kaeris 提供同样的 kaeris check 命令。

de.json
{
  "greeting": "Hallo!",
  "delete": "50 Dateien löschen",
  "save": "",
  "terms": "Lies unsere <b>AGB</b>"
}
输出退出码 1
✗ 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 会让用了其他词的翻译不通过。

kaeris-glossary.json
{"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}
]}
输出退出码 1
→ 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 时,每个发现都会变为语言文件对应行的备注,置于审查者评论旁。

.github/workflows/i18n-check.yml
- 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
locales/de.json · Files changed
  "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 翻译了此页面,并通过回译检查了每一行。尚未经过母语人士审阅。 英文原文