Comprobar traducciones con pre-commit
Con pre-commit, un commit que toca un archivo de localización ejecuta primero kaeris check y es rechazado cuando una traducción pierde un marcador o una clave. Es offline y gratuito: sin clave API, sin cuenta.
KAERIS ha traducido esta página y revisado cada línea traduciéndola de vuelta. Un hablante nativo aún no la ha revisado. Original en inglés
La receta
El hook
Guárdalo como .pre-commit-config.yaml en la raíz del proyecto. Es un hook local: pre-commit construye su propio entorno e instala kaeris desde PyPI en él, por lo que no hay que instalar nada más. files lo limita a commits que preparan algo bajo 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
Lo que imprime, en ejecuciones reales
Salida de kaeris 0.2.35, capturada el 27 de octubre de 2026. La última línea de cada cuadro es el código de salida que ve el trabajo de CI.
Lo que imprime un commit
Izquierda: un commit con archivos que están bien. Derecha: un commit con de.json que tiene {nam} en lugar de {name} y la clave checkout faltante; el commit es rechazado.
$ 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 que no toca ningún archivo de localización
El hook se omite, por lo que los commits no relacionados se mantienen rápidos.
$ 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
Configúralo en tres pasos
Añadir el hook
Guarda la configuración anterior como
.pre-commit-config.yamly define tus propios--sourcey--langs. Mantén la versión fijada y actualízala cuando hagas un upgrade.Instalar el git hook
Ejecuta
pip install pre-commity luegopre-commit installuna vez por clonación.Commit como siempre
Un commit que añade un archivo en
locales/ejecuta la comprobación y es rechazado si falla.pre-commit run --all-filesejecuta la misma comprobación bajo demanda, por ejemplo en CI.
Cómo lo comprobamos
Cada comando de esta página se ejecutó antes de ser escrito aquí. Lo que no se ejecutó también se lista.
Qué se ejecutó
pre-commit 4.7.0 con exactamente la configuración anterior en un repositorio git nuevo:
pre-commit install, luego elgit commitreal se ejecuta. El entorno del hook se construyó desde PyPI (kaeris 0.2.35). Archivos correctos: el commit se completó.de.jsonroto: el hook falló con código de salida 1 y git rechazó el commit. Un commit sin archivo de localización: omitido.Qué no se ejecutó
Un trabajo de CI que llama a
pre-commit run --all-filesno se ejecutó en un runner. No hay un repositorio de hooks publicado para KAERIS, por lo que la receta usa un hook local; no hay una línearepo: https://github.com/…para añadir.
Opciones que vale la pena conocer
Fallar también en claves obsoletas
--stricttambién falla cuando una traducción tiene claves que la fuente ya no tiene.Mantener los nombres de marca tal como están escritos
--glossary 'KAERIS,GitHub'falla un objetivo que omitió uno de los términos. La misma lista puede vivir bajokeepenkaeris.json.Diseño de archivo diferente
--outes la carpeta con las traducciones y--pattern '{lang}/common.json'sus nombres de archivo. Por defecto: el diseño que escribekaeris translate.Sin flags
Con un
kaeris.jsonen el proyecto (kaeris initescribe uno),kaeris checktoma la fuente, los idiomas y la carpeta de él.
Preguntas
¿Necesita una clave API o una cuenta?
No. kaeris check se describe en su propia ayuda como estático, local y sin API, por lo que el trabajo no necesita ningún secreto. Traducir es un comando separado que sí necesita una clave.
¿Qué detecta la comprobación?
Un marcador perdido o inventado ({name}, %s, {{x}}, plurales ICU), una clave faltante y un archivo de localización que no está allí. La comparación es local y estática. Lo que comprueba, con cada flag
¿Ralentiza cada commit?
Solo los commits que añaden un archivo que coincide con files. La primera ejecución construye el entorno del hook, lo que requiere red; las ejecuciones posteriores lo reutilizan. No lo medimos, así que no hay cifras aquí.
Seguir adelante
Otras recetas: GitHub Actions · GitLab CI · Scripts Make y npm
Referencia de CLI · Referencia de Check · Referencia de GitHub Action · Verificación gratuita en el navegador · Traducir en el navegador