Übersetzungen in GitLab CI prüfen
Der Job installiert das Paket kaeris und führt kaeris check bei Merge Requests aus, die Ihre Locale-Dateien berühren. Ein verlorener Platzhalter oder ein fehlender Schlüssel führt dazu, dass die Pipeline fehlschlägt. 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 Job
Fügen Sie es zu .gitlab-ci.yml hinzu. Ändern Sie --source zu Ihrer Basis-Sprachdatei und --langs zu den von Ihnen ausgelieferten Locales. Der Block rules führt den Job nur bei Merge Requests aus, die etwas unter locales/ ändern; lassen Sie die Zeilen changes weg, um ihn bei jedem Merge Request auszuführen.
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
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 der Job ausgibt
Die beiden script-Zeilen, in der Reihenfolge ausgeführt. Links: Dateien, die in Ordnung sind. Rechts: de.json mit {nam} anstelle von {name} und fehlendem checkout-Schlüssel; der Job stoppt mit Exit-Code 1.
$ 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
$ 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
Richten Sie es in drei Schritten ein
Job hinzufügen
Fügen Sie den Job in
.gitlab-ci.ymlein und legen Sie Ihre eigenen--sourceund--langsfest.Merge Request öffnen
Ändern Sie eine Locale-Datei in einem Branch und öffnen Sie einen Merge Request. Der Job wird ausgeführt und zeigt alle Funde in seinem Log an.
Pipeline erzwingen
Schalten Sie in den Projekteinstellungen unter Merge Requests ein, dass Pipelines erfolgreich sein müssen. Ein roter Job blockiert dann den Merge.
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 wurde ausgeführt
Beide
script-Zeilen, aus dem geparsten YAML entnommen und nacheinander in einer sauberen Python-virtuellen Umgebung ausgeführt, stoppen bei der ersten fehlerhaften Zeile wie ein GitLab-Job.pip install kaerislud kaeris 0.2.35 von PyPI herunter. Saubere Dateien: Exit-Code 0. Die fehlerhaftede.json: Exit-Code 1.Was wurde nicht ausgeführt
Kein GitLab-Runner und kein Docker-Image wurden verwendet (das obige Log stammt von einem Windows-PC mit Python 3.14, nicht von
python:3.12-slim). Derrules- undchanges-Block wurde nur als YAML geparst; GitLab hat ihn nicht ausgewertet. Das Paket deklariert Python 3.8 oder neuer.
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
Kann ich das Ergebnis als Datei speichern?
Ja: --json gibt das Ergebnis als JSON aus und --sarif PATH schreibt einen SARIF-Bericht. Fügen Sie die Datei unter artifacts hinzu, wenn Sie sie behalten möchten. Beide Flags finden Sie in der Hilfe von kaeris check; wir haben keinen Artifact-Upload auf GitLab durchgeführt.
Weiter geht's
Andere Rezepte: GitHub Actions · pre-commit · Make und npm Skripte
Referenz zur CLI · Referenz zur Prüfung · Referenz zur GitHub Action · Kostenlose Prüfung im Browser · Übersetzen im Browser