Übersetzungen mit pre-commit prüfen
Mit pre-commit wird ein Commit, der eine Locale-Datei berührt, zuerst kaeris check ausführen und abgewiesen, wenn eine Übersetzung einen Platzhalter oder einen Schlüssel verloren hat. Es ist offline und kostenlos: kein API-Schlüssel, kein Konto.
KAERIS hat diese Seite übersetzt und jede Zeile durch Rückübersetzung geprüft. Ein Muttersprachler hat sie noch nicht überprüft. Englisches Original
Das Rezept
Der Hook
Speichern Sie ihn als .pre-commit-config.yaml im Projekt-Root. Es ist ein lokaler Hook: pre-commit baut seine eigene Umgebung auf und installiert kaeris von PyPI darin, sodass nichts anderes installiert werden muss. files beschränkt ihn auf Commits, die etwas unter locales/ stagen.
repos:
- repo: local
hooks:
- id: kaeris-check
name: kaeris check (translations)
entry: kaeris check --source locales/en.json --langs de,fr --ci
language: python
additional_dependencies: ["kaeris==0.2.35"]
files: ^locales/
pass_filenames: false
Was es bei echten Ausführungen ausgibt
Ausgabe von kaeris 0.2.35, erfasst am 27. Oktober 2026. Die letzte Zeile jeder Box ist der Exit-Code, den der CI-Job sieht.
Was ein Commit ausgibt
Links: ein Commit mit Dateien, die in Ordnung sind. Rechts: ein Commit mit de.json, das {nam} anstelle von {name} hat und den checkout-Schlüssel vermisst; der Commit wird abgewiesen.
$ git commit -m "add locales" kaeris check (translations)..............................................Passed [main (root-commit) 96c8a87] add locales 4 files changed, 25 insertions(+) create mode 100644 .pre-commit-config.yaml create mode 100644 locales/de.json create mode 100644 locales/en.json create mode 100644 locales/fr.json exit code: 0
$ git commit -m "break de"
kaeris check (translations)..............................................Failed
- hook id: kaeris-check
- exit code: 1
✗ 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
exit code: 1
Ein Commit, der keine Locale-Datei berührt
Der Hook wird übersprungen, sodass nicht verwandte Commits schnell sind.
$ git commit -m "readme" # nothing under locales/ is staged kaeris check (translations)..........................(no files to check)Skipped [main e82b41d] readme 1 file changed, 1 insertion(+) create mode 100644 README.md exit code: 0
Richten Sie es in drei Schritten ein
Hook hinzufügen
Speichern Sie die obige Konfiguration als
.pre-commit-config.yamlund legen Sie Ihre eigenen--sourceund--langsfest. Behalten Sie die Versionsmarkierung bei und erhöhen Sie sie, wenn Sie ein Upgrade durchführen.Git-Hook installieren
Führen Sie
pip install pre-commitund dannpre-commit installeinmal pro Klon aus.Wie gewohnt committen
Ein Commit, der eine Datei unter
locales/staget, führt die Prüfung aus und wird bei einem Fehler abgelehnt.pre-commit run --all-filesführt dieselbe Prüfung bei Bedarf aus, z. B. in CI.
Wie wir das geprüft haben
Jeder Befehl auf dieser Seite wurde ausgeführt, bevor er hier geschrieben wurde. Was nicht ausgeführt wurde, ist ebenfalls aufgelistet.
Was lief
pre-commit 4.7.0 mit exakt der obigen Konfiguration in einem frischen Git-Repository:
pre-commit install, dann echtegit commit-Läufe. Die Hook-Umgebung wurde von PyPI (kaeris 0.2.35) erstellt. Gute Dateien: Der Commit wurde durchgeführt. Defektede.json: Der Hook schlug mit Exit-Code 1 fehl und Git lehnte den Commit ab. Ein Commit ohne Locale-Datei: übersprungen.Was nicht lief
Ein CI-Job, der
pre-commit run --all-filesaufruft, wurde auf keinem Runner ausgeführt. Es gibt kein veröffentlichtes Hook-Repository für kaeris, daher verwendet das Rezept einen lokalen Hook; es gibt keine Zeilerepo: https://github.com/…zum Hinzufügen.
Optionen, die es wert sind, zu kennen
Auch bei veralteten Schlüsseln fehlschlagen
--strictschlägt auch fehl, wenn eine Übersetzung Schlüssel hat, die die Quelle nicht mehr hat.Markennamen beibehalten, wie sie geschrieben sind
--glossary 'KAERIS,GitHub'führt dazu, dass ein Ziel fehlschlägt, das einen der Begriffe fallen gelassen hat. Dieselbe Liste kann unterkeepinkaeris.jsonstehen.Anderes Dateilayout
--outist der Ordner mit den Übersetzungen und--pattern '{lang}/common.json'deren Dateinamen. Standard: das Layout, daskaeris translateschreibt.Gar keine Flags
Mit einer
kaeris.jsonim Projekt (kaeris initschreibt eine) nimmtkaeris checkQuelle, Sprachen und Ordner daraus.
Fragen
Benötigt es einen API-Schlüssel oder ein Konto?
Nein. kaeris check wird in seiner eigenen Hilfe als statisch, lokal und ohne API beschrieben, sodass der Job kein Secret benötigt. Das Übersetzen ist ein separater Befehl, der einen Schlüssel benötigt.
Was fängt die Prüfung ab?
Ein verlorener oder erfundener Platzhalter ({name}, %s, {{x}}, ICU-Pluralformen), ein fehlender Schlüssel und eine nicht vorhandene Locale-Datei. Der Vergleich ist lokal und statisch. Was es prüft, mit jedem Flag
Verlangsamt es jeden Commit?
Nur Commits, die eine Datei staget, die mit files übereinstimmt. Der erste Lauf erstellt die Hook-Umgebung, die ein Netzwerk benötigt; spätere Läufe verwenden sie wieder. Wir haben es nicht gemessen, daher keine Zahl hier.
Weiter geht's
Andere Rezepte: GitHub Actions · GitLab CI · Make und npm Skripte
Referenz zur CLI · Referenz zur Prüfung · Referenz zur GitHub Action · Kostenlose Prüfung im Browser · Übersetzen im Browser