Übersetzen

Übersetzungen prüfen, bevor sie ausgeliefert werden

Läuft auf Ihrem Rechner, braucht keinen Schlüssel und sendet nichts nach außen. Die Prüfung findet verlorene Variablen wie {name}, geänderte Zahlen, fehlende Schlüssel und leere Zeilen. Bei Fehlern endet sie mit Code 1, damit CI den Merge stoppen kann; eine leere Zeile ist nur eine Warnung und führt erst mit --strict zu Code 1.

Ausführen
npx kaeris check --source en.json --langs de

Ohne Python: npx startet das npm-Paket mit Node 18 oder neuer. Mit Python liefert pip install kaeris denselben Befehl kaeris check.

de.json
{
  "greeting": "Hallo!",
  "delete": "50 Dateien löschen",
  "save": "",
  "terms": "Lies unsere <b>AGB</b>"
}
AusgabeExit-Code 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

Quelle: {"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}

FlagBedeutung
--strictAuch bei Warnungen (etwa einer leeren Übersetzung) und bei zusätzlichen Schlüsseln fehlschlagen, die nicht in der Quelle stehen.
--pattern '{lang}/common.json'Wo die Übersetzungen liegen. Standard: dort, wo translate sie schreibt, neben der Quelle (de.json, app_de.arb, values-de/strings.xml).
--jsonMaschinenlesbares Ergebnis anstelle des Berichts.
--sarif kaeris.sarifSchreibt zusätzlich einen SARIF-2.1.0-Bericht für GitHub, siehe unten.

Quelldatei: jedes der 13 Formate (JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent). Exit-Codes: 0 sauber, 1 Probleme gefunden, 2 falsche Verwendung oder eine Datei, die nicht gelesen werden kann.

Anleitungen nach Format: 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

Glossar: ein Wort pro Begriff und Sprache

--keep lässt ein Wort, wie es ist. Muss ein Begriff übersetzt werden, aber immer gleich, tragen Sie ihn in kaeris-glossary.json neben kaeris.json ein. translate gibt die vereinbarten Wörter an das Modell weiter, und check schlägt fehl, wenn eine Übersetzung ein anderes Wort verwendet.

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}
]}
AusgabeExit-Code 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

Quelle: {"open": "Open the workspace", "leave": "Leave the workspace"}. Die französische Übersetzung schreibt «bureau», die russische «рабочей области».

Ein Begriff zählt als ganzes Wort: Pro wird in „product“ nicht gefunden. Eine gebeugte Form des vereinbarten Worts besteht die Prüfung. Wo Wörter ihre Form ändern oder zu Komposita verschmelzen (Russisch, Polnisch, Deutsch und andere), ist ein Fehlen eine Warnung und kein Fehler, weil es trotzdem korrekte Grammatik sein kann. Eine Liste von Wörtern legt erlaubte Varianten fest. Funktioniert in jedem Tarif, auch in der kostenlosen Demo.

Funde direkt an der Zeile im Pull Request

Mit --sarif wird jeder Fund zu einer Notiz an der genauen Zeile der Sprachdatei, neben den Kommentaren Ihres Reviewers.

.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"

Der Bericht wird auch bei einem sauberen Lauf geschrieben, weil upload-sarif fehlschlägt, wenn die Datei fehlt. Notizen an der Zeile sind in öffentlichen Repositories kostenlos; private brauchen GitHub Advanced Security. Ohne das funktioniert die Prüfung trotzdem: Der Job schlägt fehl, und das Log listet jeden Fund auf.

KAERIS hat diese Seite übersetzt und jede Zeile durch Rückübersetzung geprüft. Ein Muttersprachler hat sie noch nicht überprüft. Englisches Original