Vérifiez les traductions dans GitHub Actions
Une traduction qui supprime {name} ou ignore une clé casse l'application à l'exécution, et la revue la détecte rarement. Ce workflow exécute kaeris check sur chaque pull request et fait passer la tâche au rouge. Il est hors ligne et gratuit : pas de clé API, pas de compte.
KAERIS a traduit cette page et vérifié chaque ligne en la retraduisant. Un locuteur natif ne l'a pas encore revue. Original anglais
La recette
Le workflow
Enregistrez-le sous .github/workflows/i18n-check.yml. Changez source pour votre fichier de langue de base et languages pour les locales que vous expédiez.
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
Sans Python : npx
Le paquet npm kaeris lance la même vérification avec Node 18 ou plus récent ; npx le télécharge lui-même, sans étape d’installation. Il ne contient que check : pour traduire, il faut le paquet Python.
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
La même chose sans l'Action
Étapes simples avec Python et pip. Le journal affiche ensuite chaque découverte ligne par ligne au lieu du tableau que l'Action imprime.
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
Découvertes sur la ligne exacte de la pull request (facultatif)
L'Action peut également écrire un rapport SARIF ; son téléversement transforme chaque découverte en annotation dans le diff. Les téléversements de code-scanning sont gratuits sur les dépôts publics ; les dépôts privés nécessitent GitHub Advanced Security.
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
Ce qu'elle imprime, lors de vraies exécutions
Sortie de kaeris 0.2.35, capturée le 27 octobre 2026. La dernière ligne de chaque boîte est le code de sortie que le job CI voit.
Ce que le job imprime
L'Action imprime un tableau récapitulatif par langue et se termine par la ligne d'erreur lorsqu'il y a un problème. Gauche : fichiers corrects. Droite : de.json avec {nam} au lieu de {name} et la clé checkout manquante.
## 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
## 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
Ce qu’affiche l’étape npx
Le même projet vérifié avec npx : kaeris 0.2.37 depuis npm, un cache npm vide et CI=true, comme sur un runner neuf. La première ligne est npm qui installe le paquet.
$ 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
$ 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
Configurez-le en trois étapes
Sauvegarder le workflow
Créez
.github/workflows/i18n-check.ymlavec le workflow ci-dessus, en y ajoutant votre propresourceet voslanguages.Ouvrir une pull request
Poussez une branche qui modifie un fichier de locale. Le job s'exécute sur chaque pull request et devient rouge en cas de placeholder perdu ou de clé manquante.
Rendre la vérification obligatoire
Dans les paramètres du dépôt, ajoutez le job comme vérification de statut obligatoire dans la protection de branche. Un job rouge bloque alors la fusion.
Comment nous avons vérifié cela
Chaque commande de cette page a été exécutée avant d'être écrite ici. Ce qui n'a pas été exécuté est également listé.
Ce qui a été exécuté
Le script d'étape de
kaeris-io/kaeris-actionà la balisev1, copié de GitHub le 27 octobre 2026 et exécuté en bash sur un projet de test, avec le CLI installé depuis PyPI (kaeris 0.2.35). Fichiers propres : code de sortie 0. Lede.jsonincorrect : code de sortie 1 et la ligne d'erreur montrée ci-dessus.npx
npx kaeris checkdu paquet npm kaeris 0.2.37 a été lancé le 28 octobre 2026 sur le même projet de test, avec un cache npm vide,CI=trueet sans--yes. Fichiers corrects : code de sortie 0. Lede.jsoncassé : code de sortie 1.SARIF
Le flag
--sarifa été exécuté sur le projet incorrect et a écrit un rapport avec 4 résultats ; sur des fichiers propres, il a écrit un rapport avec 0. Le téléversement sur GitHub n'a pas été tenté.Ce qui n’a pas été exécuté
Le fichier workflow lui-même n’a pas été exécuté sur un runner GitHub, pas plus que
actions/checkout,actions/setup-python,actions/setup-nodeetupload-sarif. La syntaxe des workflows ci-dessus n’a pas été vérifiée par GitHub.Quel CLI l'Action installe
L'Action exécute
pip install "kaeris>=0.2.12", donc un job récupère la dernière version disponible à ce moment-là. Si vous avez besoin d'une version fixe, utilisez la variante "plain-steps" et épinglez-la :pip install kaeris==0.2.35.
Options à connaître
Échouer également sur les clés obsolètes
Définissez
strict: truesur l'Action (ou--strictdans la variante simple).Traductions dans un autre dossier
Définissez
out: path/to/translationssur l'Action ; par défaut, elle utilise le dossier du fichier source.Conserver les noms de marque tels quels
--glossary 'KAERIS,GitHub'fait échouer une cible qui a supprimé l'un des termes. La même liste peut se trouver souskeepdanskaeris.json.Disposition de fichiers différente
--outest le dossier contenant les traductions et--pattern '{lang}/common.json'leurs noms de fichiers. Par défaut : la disposition quekaeris translateécrit.
Questions
A-t-il besoin d'une clé API ou d'un compte ?
Non. kaeris check est décrit dans son aide comme statique, local et sans API, donc le job n'a pas besoin de secret. La traduction est une commande distincte qui nécessite une clé.
Quels formats de fichiers lit-il ?
L'aide de kaeris check liste JSON, ARB, YAML, .strings, .xcstrings, .po, Android XML, CSV, XLIFF, .properties, .resx, Fluent et Markdown comme formats sources (kaeris 0.2.35 et plus récents). Guides par format
Qu'est-ce qui fait échouer le job ?
Le code de sortie de kaeris check : 0 propre, 1 un problème a été trouvé, 2 utilisation incorrecte ou un fichier qu'il ne peut pas lire. Un problème que la vérification qualifie de rouge fait échouer le job ; strict fait également échouer les clés obsolètes. Référence GitHub Action
Continuer
Autres recettes : GitLab CI · pre-commit · Make et scripts npm
Référence CLI · Référence Check · Référence GitHub Action · Vérification gratuite dans le navigateur · Traduction dans le navigateur