Controlla le traduzioni con pre-commit
Con pre-commit, un commit che tocca un file di localizzazione esegue prima kaeris check e viene rifiutato quando una traduzione ha perso un placeholder o una chiave. È offline e gratuito: nessuna API key, nessun account.
KAERIS ha tradotto questa pagina e controllato ogni riga ritraducendola. Un madrelingua non l'ha ancora revisionata. Originale in inglese
La ricetta
L'hook
Salvalo come .pre-commit-config.yaml nella root del progetto. È un hook locale: pre-commit costruisce il proprio ambiente e installa kaeris da PyPI al suo interno, quindi non è necessario installare altro. files lo limita ai commit che mettono in stage qualcosa sotto 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
Cosa stampa, nelle esecuzioni reali
Output di kaeris 0.2.35, catturato il 27 ottobre 2026. L'ultima riga di ogni box è il codice di uscita che il job CI vede.
Cosa stampa un commit
A sinistra: un commit con file corretti. A destra: un commit con de.json che ha {nam} invece di {name} e la chiave checkout mancante; il commit viene rifiutato.
$ 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 che non tocca alcun file di localizzazione
L'hook viene saltato, quindi i commit non correlati rimangono veloci.
$ 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
Configuralo in tre passaggi
Aggiungi l'hook
Salva la configurazione sopra come
.pre-commit-config.yamle imposta i tuoi--sourcee--langs. Mantieni il pin della versione e aumentalo quando aggiorni.Installa l'hook git
Esegui
pip install pre-commite poipre-commit installuna volta per clone.Esegui il commit come al solito
Un commit che aggiunge un file sotto
locales/esegue il controllo e viene rifiutato quando fallisce.pre-commit run --all-filesesegue lo stesso controllo su richiesta, ad esempio in CI.
Come abbiamo verificato questo
Ogni comando in questa pagina è stato eseguito prima di essere scritto qui. Quello che non è stato eseguito è elencato anch'esso.
Cosa è stato eseguito
pre-commit 4.7.0 con esattamente la configurazione sopra in un repository git nuovo:
pre-commit install, poi il verogit commitviene eseguito. L'ambiente dell'hook è stato creato da PyPI (kaeris 0.2.35). File corretti: il commit è andato a buon fine.de.jsonerrato: l'hook è fallito con codice di uscita 1 e git ha rifiutato il commit. Un commit senza file di localizzazione: saltato.Cosa non è stato eseguito
Un job CI che chiama
pre-commit run --all-filesnon è stato eseguito su un runner. Non esiste un repository di hook pubblicato per kaeris, quindi la ricetta utilizza un hook locale; non c'è una rigarepo: https://github.com/…da aggiungere.
Opzioni degne di nota
Fallisce anche per chiavi obsolete
--strictfallisce anche quando una traduzione ha chiavi che la sorgente non ha più.Mantieni i nomi dei brand così come sono scritti
--glossary 'KAERIS,GitHub'fa fallire un target che ha omesso uno dei termini. Lo stesso elenco può risiedere sottokeepinkaeris.json.Layout file diverso
--outè la cartella con le traduzioni e--pattern '{lang}/common.json'i loro nomi file. Predefinito: il layout chekaeris translatescrive.Nessun flag
Con un file
kaeris.jsonnel progetto (scritto dakaeris init),kaeris checkprende sorgente, lingue e cartella da esso.
Domande
Richiede una chiave API o un account?
No. kaeris check è descritto nel suo stesso aiuto come statico, locale e senza API, quindi il job non necessita di secret. La traduzione è un comando separato che richiede una chiave.
Cosa rileva il controllo?
Un placeholder perso o inventato ({name}, %s, {{x}}, plurali ICU), una chiave mancante e un file di localizzazione inesistente. Il confronto è locale e statico. Cosa controlla, con ogni flag
Rallenta ogni commit?
Solo i commit che aggiungono un file corrispondente a files. La prima esecuzione crea l'ambiente dell'hook, che necessita di rete; le esecuzioni successive lo riutilizzano. Non l'abbiamo misurato, quindi nessun dato qui.
Continua
Altre ricette: GitHub Actions · GitLab CI · Script Make e npm
Riferimento CLI · Riferimento Check · Riferimento GitHub Action · Controllo gratuito nel browser · Traduci nel browser