Übersetzen

Übersetzungen in GitHub Actions prüfen

Eine Übersetzung, die {name} fallen lässt oder einen Schlüssel überspringt, bricht die App zur Laufzeit und wird selten bei der Überprüfung entdeckt. Dieser Workflow führt kaeris check bei jeder Pull-Anfrage aus und schlägt fehl. Er 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 Workflow

Speichern Sie es als .github/workflows/i18n-check.yml. Ändern Sie source zu Ihrer Basis-Sprachdatei und languages zu den von Ihnen ausgelieferten Lokalisierungen.

Konfiguration.github/workflows/i18n-check.yml
name: i18n check
on: pull_request
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kaeris-io/kaeris-action@v1
        with:
          mode: check
          source: locales/en.json
          languages: de,fr

Ohne Python: npx

Das npm-Paket kaeris führt dieselbe Prüfung mit Node 18 oder neuer aus; npx lädt es selbst, ein Installationsschritt entfällt. Es enthält nur check: Zum Übersetzen braucht es das Python-Paket.

Konfiguration.github/workflows/i18n-check.yml (steps)
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - run: npx kaeris check --source locales/en.json --langs de,fr

Das Gleiche ohne die Action

Einfache Schritte mit Python und pip. Das Log zeigt dann jede Fundstelle zeilenweise anstelle der Tabelle, die die Action ausgibt.

Konfiguration.github/workflows/i18n-check.yml (steps)
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install kaeris
      - run: kaeris check --source locales/en.json --langs de,fr --ci

Fundstellen in der exakten Zeile des Pull Requests (optional)

Die Action kann auch einen SARIF-Bericht schreiben; das Hochladen verwandelt jede Fundstelle in eine Anmerkung im Diff. Code-Scanning-Uploads sind auf öffentlichen Repositories kostenlos; private benötigen GitHub Advanced Security.

Konfiguration.github/workflows/i18n-check.yml
name: i18n check
on: pull_request
permissions:
  contents: read
  security-events: write
jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: kaeris-io/kaeris-action@v1
        with:
          mode: check
          source: locales/en.json
          languages: de,fr
          sarif-file: kaeris.sarif
      - uses: github/codeql-action/upload-sarif@v3
        if: always()
        with:
          sarif_file: kaeris.sarif

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 Action gibt eine Zusammenfassungstabelle pro Sprache aus und endet mit der Fehlerzeile, wenn etwas schiefgeht. Links: Dateien, die in Ordnung sind. Rechts: de.json mit {nam} anstelle von {name} und fehlendem checkout-Schlüssel.

Dateien, die in Ordnung sindAction step output
## KAERIS i18n — CI check

Placeholder-loss: **0** (should be 0).

| Language | Status | Missing | Placeholder issues | Translated |
|---|---|---|---|---|
| de | ✓ complete | 0 | 0 | – |
| fr | ✓ complete | 0 | 0 | – |

_Generated from `kaeris check --json` — no fabricated numbers._
step exit=0
--- GITHUB_OUTPUT (without summary body):
missing=0
placeholder-issues=0
changed=false
check-exit-code=0
translate-exit-code=0
Eine fehlerhafte ÜbersetzungAction step output
## KAERIS i18n — CI check

Placeholder-loss: **1** (should be 0).
Missing keys remaining: **1**.

| Language | Status | Missing | Placeholder issues | Translated |
|---|---|---|---|---|
| de | ⚠ 1 missing, 1 placeholder issue | 1 | 1 | – |
| fr | ✓ complete | 0 | 0 | – |

_Generated from `kaeris check --json` — no fabricated numbers._
::error::kaeris check found incomplete/broken translations — see the job summary for the language matrix
step exit=1
--- GITHUB_OUTPUT (without summary body):
missing=1
placeholder-issues=1
changed=false
check-exit-code=1
translate-exit-code=0

Was der npx-Schritt ausgibt

Dasselbe Projekt, geprüft mit npx: kaeris 0.2.37 aus npm, leerer npm-Cache und CI=true, wie auf einem frischen Runner. In der ersten Zeile installiert npm das Paket.

Dateien, die in Ordnung sindnpx step output
$ npx kaeris check --source locales/en.json --langs de,fr
npm warn exec The following package was not found and will be installed: [email protected]
✓ de: complete & placeholder-safe
✓ fr: complete & placeholder-safe
✓ all locales complete & placeholder-safe
exit code: 0
Eine fehlerhafte Übersetzungnpx step output
$ npx kaeris check --source locales/en.json --langs de,fr
npm warn exec The following package was not found and will be installed: [email protected]
✗ 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

Richten Sie es in drei Schritten ein

  1. Speichern Sie den Workflow

    Erstellen Sie .github/workflows/i18n-check.yml mit dem obigen Workflow, mit Ihren eigenen source und languages.

  2. Öffnen Sie einen Pull Request

    Pushen Sie einen Branch, der eine Locale-Datei ändert. Der Job läuft bei jedem Pull Request und wird bei einem verlorenen Platzhalter oder einem fehlenden Schlüssel rot.

  3. Machen Sie die Prüfung erforderlich

    Fügen Sie in den Repository-Einstellungen den Job als erforderliche Statusprüfung in der Branch-Schutzregel hinzu. 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.

Optionen, die es wert sind, zu kennen

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.

Welche Dateiformate liest es?

Die Hilfe von kaeris check listet JSON, ARB, YAML, .strings, .xcstrings, .po, Android XML, CSV, XLIFF, .properties, .resx, Fluent und Markdown als Quellformate auf (kaeris 0.2.35 und neuer). Anleitungen nach Format

Was lässt den Job fehlschlagen?

Der Exit-Code von kaeris check: 0 sauber, 1 ein Problem wurde gefunden, 2 falsche Verwendung oder eine Datei, die es nicht lesen kann. Ein Problem, das der Check als rot bezeichnet, führt dazu, dass der Job fehlschlägt; strict führt auch dazu, dass veraltete Schlüssel fehlschlagen. Referenz zur GitHub Action

Weiter geht's

Andere Rezepte: GitLab CI · 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