Verificar traducciones en GitLab CI
El trabajo instala el paquete kaeris y ejecuta kaeris check en las solicitudes de fusión que tocan tus archivos de localización. Un marcador perdido o una clave faltante hacen fallar la canalización. 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 trabajo
Añádelo a .gitlab-ci.yml. Cambia --source a tu archivo de idioma base y --langs a las localizaciones que envías. El bloque rules ejecuta el trabajo solo en solicitudes de fusión que cambian algo bajo locales/; elimina las líneas changes para ejecutarlo en cada solicitud de fusión.
i18n-check:
stage: test
image: python:3.12-slim
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
changes:
- locales/**/*
script:
- pip install kaeris
- kaeris check --source locales/en.json --langs de,fr --ci
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 el trabajo
Las dos líneas de script, ejecutadas en orden. Izquierda: archivos que están bien. Derecha: de.json con {nam} en lugar de {name} y la clave checkout faltante; el trabajo se detiene con el código de salida 1.
$ pip install kaeris Collecting kaeris Using cached kaeris-0.2.35-py3-none-any.whl.metadata (26 kB) Using cached kaeris-0.2.35-py3-none-any.whl (131 kB) Installing collected packages: kaeris Successfully installed kaeris-0.2.35 $ kaeris check --source locales/en.json --langs de,fr --ci ✓ de: complete & placeholder-safe ✓ fr: complete & placeholder-safe ✓ all locales complete & placeholder-safe Job succeeded exit code: 0
$ pip install kaeris
Requirement already satisfied: kaeris in C:\Users\Inzagi\AppData\Local\Temp\claude\C--Users-Inzagi-projects-kaeris\bfeebe69-3cfd-4f28-bbe7-e5600be082b9\scratchpad\venv-gl2\Lib\site-packages (0.2.35)
$ kaeris check --source locales/en.json --langs de,fr --ci
✗ 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
ERROR: Job failed: exit code 1
exit code: 1
Configúralo en tres pasos
Añadir el trabajo
Pega el trabajo en
.gitlab-ci.ymly configura tu propio--sourcey--langs.Abrir una solicitud de fusión
Cambia un archivo de localización en una rama y abre una solicitud de fusión. El trabajo se ejecuta y muestra todos los hallazgos en su registro.
Requerir el pipeline
En la configuración del proyecto, bajo solicitudes de fusión, activa que los pipelines deben tener éxito. Un trabajo rojo entonces bloquea la fusión.
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.
Lo que se ejecutó
Ambas líneas de
script, tomadas del YAML analizado y ejecutadas una tras otra en un entorno virtual de Python limpio, deteniéndose en la primera línea fallida como lo hace un trabajo de GitLab.pip install kaerisdescargó kaeris 0.2.35 de PyPI. Archivos limpios: código de salida 0. Elde.jsonroto: código de salida 1.Lo que no se ejecutó
No se utilizó ningún runner de GitLab ni imagen Docker (el registro anterior proviene de un PC con Windows y Python 3.14, no de
python:3.12-slim). El bloquerulesychangessolo se analizó como YAML; GitLab no lo evaluó. El paquete declara Python 3.8 o superior.
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
¿Puedo guardar el resultado como un archivo?
Sí: --json imprime el resultado como JSON y --sarif PATH escribe un informe SARIF. Añade el archivo bajo artifacts si quieres conservarlo. Ambos flags están en la ayuda de kaeris check; no ejecutamos una carga de artefactos en GitLab.
Seguir adelante
Otras recetas: GitHub Actions · pre-commit · Make y scripts npm
Referencia de CLI · Referencia de Check · Referencia de GitHub Action · Verificación gratuita en el navegador · Traducir en el navegador