Vérifier les traductions avec pre-commit
Avec pre-commit, un commit qui touche un fichier de langue exécute d'abord kaeris check et est refusé lorsqu'une traduction a perdu un placeholder ou une clé. C'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 hook
Sauvegardez-le sous .pre-commit-config.yaml à la racine du projet. C'est un hook local : pre-commit construit son propre environnement et y installe kaeris depuis PyPI, donc rien d'autre n'a besoin d'être installé. files le limite aux commits qui mettent en scène quelque chose sous locales/.
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
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 qu'un commit affiche
À gauche : un commit avec des fichiers qui sont corrects. À droite : un commit avec de.json qui a {nam} au lieu de {name} et la clé checkout manquante ; le commit est refusé.
$ 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
Un commit qui ne touche aucun fichier de langue
Le hook est ignoré, donc les commits non liés restent rapides.
$ 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
Configurez-le en trois étapes
Ajouter le hook
Enregistrez la configuration ci-dessus sous
.pre-commit-config.yamlet définissez vos propres--sourceet--langs. Conservez la version épinglée et augmentez-la lors de la mise à niveau.Installer le hook git
Exécutez
pip install pre-commitpuispre-commit installune fois par clone.Commit comme d'habitude
Un commit qui met en staging un fichier sous
locales/exécute la vérification et est refusé en cas d'échec.pre-commit run --all-filesexécute la même vérification à la demande, par exemple dans CI.
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é
pre-commit 4.7.0 avec exactement la configuration ci-dessus dans un dépôt git vierge :
pre-commit install, puis un vraigit commits'exécute. L'environnement du hook a été construit à partir de PyPI (kaeris 0.2.35). Fichiers valides : le commit a réussi. Fichierde.jsoncorrompu : le hook a échoué avec le code de sortie 1 et git a refusé le commit. Un commit sans fichier de langue : ignoré.Ce qui n'a pas été exécuté
Une tâche CI qui appelle
pre-commit run --all-filesn'a pas été exécutée sur un runner. Il n'y a pas de dépôt de hook publié pour kaeris, donc la recette utilise un hook local ; il n'y a pas de lignerepo: https://github.com/…à ajouter.
Options à connaître
Échouer aussi sur les clés obsolètes
--strictéchoue également lorsqu'une traduction a des clés que la source n'a plus.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.Aucun drapeau du tout
Avec un fichier
kaeris.jsondans le projet (kaeris initen écrit un),kaeris checkrécupère la source, les langues et le dossier à partir de celui-ci.
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é.
Que détecte la vérification ?
Un placeholder perdu ou inventé ({name}, %s, {{x}}, pluriels ICU), une clé manquante et un fichier de langue absent. La comparaison est locale et statique. Ce qu'il vérifie, avec chaque drapeau
Est-ce que cela ralentit chaque commit ?
Seulement les commits qui mettent en staging un fichier correspondant à files. La première exécution construit l'environnement du hook, ce qui nécessite une connexion réseau ; les exécutions ultérieures le réutilisent. Nous ne l'avons pas chronométré, donc pas de chiffre ici.
Continuer
Autres recettes : GitHub Actions · GitLab CI · Scripts Make et npm
Référence CLI · Référence Check · Référence GitHub Action · Vérification gratuite dans le navigateur · Traduction dans le navigateur