Traduire

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/.

Configuration.pre-commit-config.yaml
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é.

Fichiers correctsgit commit
$ 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
Une traduction incorrectegit commit
$ 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.

Rien à vérifiergit commit
$ 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

  1. Ajouter le hook

    Enregistrez la configuration ci-dessus sous .pre-commit-config.yaml et définissez vos propres --source et --langs. Conservez la version épinglée et augmentez-la lors de la mise à niveau.

  2. Installer le hook git

    Exécutez pip install pre-commit puis pre-commit install une fois par clone.

  3. 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-files exé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é.

Options à connaître

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