Comprueba traducciones en GitHub Actions
Una traducción que omite {name} o salta una clave rompe la aplicación en tiempo de ejecución, y la revisión rara vez lo detecta. Este flujo de trabajo ejecuta kaeris check en cada pull request y pone el trabajo en rojo. 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 flujo de trabajo
Guárdalo como .github/workflows/i18n-check.yml. Cambia source a tu archivo de idioma base y languages a las localizaciones que envías.
name: i18n check
on: pull_request
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: kaeris-io/kaeris-action@v1
with:
mode: check
source: locales/en.json
languages: de,fr
Sin Python: npx
El paquete npm kaeris ejecuta la misma revisión con Node 18 o posterior; npx lo descarga solo, sin paso de instalación. Solo incluye check: para traducir hace falta el paquete de Python.
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npx kaeris check --source locales/en.json --langs de,fr
Lo mismo sin la Action
Pasos sencillos con Python y pip. El registro muestra cada hallazgo línea por línea en lugar de la tabla que imprime la Action.
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install kaeris
- run: kaeris check --source locales/en.json --langs de,fr --ci
Hallazgos en la línea exacta de la pull request (opcional)
La Action también puede escribir un informe SARIF; al cargarlo, cada hallazgo se convierte en una anotación en la diferencia. Las cargas de escaneo de código son gratuitas en repositorios públicos; los privados necesitan GitHub Advanced Security.
name: i18n check
on: pull_request
permissions:
contents: read
security-events: write
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: kaeris-io/kaeris-action@v1
with:
mode: check
source: locales/en.json
languages: de,fr
sarif-file: kaeris.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: kaeris.sarif
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
La Action imprime una tabla resumen por idioma y termina con la línea de error cuando algo va mal. Izquierda: archivos que están bien. Derecha: de.json con {nam} en lugar de {name} y la clave checkout faltante.
## KAERIS i18n — CI check Placeholder-loss: **0** (should be 0). | Language | Status | Missing | Placeholder issues | Translated | |---|---|---|---|---| | de | ✓ complete | 0 | 0 | – | | fr | ✓ complete | 0 | 0 | – | _Generated from `kaeris check --json` — no fabricated numbers._ step exit=0 --- GITHUB_OUTPUT (without summary body): missing=0 placeholder-issues=0 changed=false check-exit-code=0 translate-exit-code=0
## KAERIS i18n — CI check Placeholder-loss: **1** (should be 0). Missing keys remaining: **1**. | Language | Status | Missing | Placeholder issues | Translated | |---|---|---|---|---| | de | ⚠ 1 missing, 1 placeholder issue | 1 | 1 | – | | fr | ✓ complete | 0 | 0 | – | _Generated from `kaeris check --json` — no fabricated numbers._ ::error::kaeris check found incomplete/broken translations — see the job summary for the language matrix step exit=1 --- GITHUB_OUTPUT (without summary body): missing=1 placeholder-issues=1 changed=false check-exit-code=1 translate-exit-code=0
Lo que imprime el paso con npx
El mismo proyecto revisado con npx: kaeris 0.2.37 desde npm, caché de npm vacía y CI=true, como en un runner limpio. La primera línea es npm instalando el paquete.
$ npx kaeris check --source locales/en.json --langs de,fr npm warn exec The following package was not found and will be installed: [email protected] ✓ de: complete & placeholder-safe ✓ fr: complete & placeholder-safe ✓ all locales complete & placeholder-safe exit code: 0
$ npx kaeris check --source locales/en.json --langs de,fr npm warn exec The following package was not found and will be installed: [email protected] ✗ 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
Configúralo en tres pasos
Guardar el flujo de trabajo
Crea
.github/workflows/i18n-check.ymlcon el flujo de trabajo anterior, con tu propiosourceylanguages.Abrir una pull request
Sube una rama que cambie un archivo de localización. El trabajo se ejecuta en cada pull request y se pone rojo ante un marcador perdido o una clave faltante.
Hacer la verificación obligatoria
En la configuración del repositorio, añade el trabajo como una verificación de estado obligatoria en la protección de ramas. 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ó
El script de paso de
kaeris-io/kaeris-actionen la etiquetav1, copiado de GitHub el 27 de octubre de 2026 y ejecutado en bash en un proyecto de prueba, con la CLI instalada desde PyPI (kaeris 0.2.35). Archivos limpios: código de salida 0. Elde.jsonroto: código de salida 1 y la línea de error mostrada arriba.npx
npx kaeris checkdel paquete npm kaeris 0.2.37 se ejecutó el 28 de octubre de 2026 en el mismo proyecto de prueba, con la caché de npm vacía,CI=truey sin--yes. Archivos correctos: código de salida 0. Elde.jsonroto: código de salida 1.SARIF
La bandera
--sarifse ejecutó en el proyecto roto y escribió un informe con 4 resultados; en archivos limpios escribió un informe con 0. La carga a GitHub no se intentó.Lo que no se ejecutó
El propio archivo de flujo de trabajo no se ejecutó en un runner de GitHub, y tampoco
actions/checkout,actions/setup-python,actions/setup-nodeyupload-sarif. GitHub no verificó la sintaxis de los flujos de trabajo anteriores.Qué CLI instala la Action
La Action ejecuta
pip install "kaeris>=0.2.12", por lo que un trabajo recoge la versión más reciente en ese momento. Si necesitas una versión fija, usa la variante de pasos sencillos y fíjala:pip install kaeris==0.2.35.
Opciones que vale la pena conocer
Fallar también por claves obsoletas
Establece
strict: trueen la Action (o--stricten la variante simple).Traducciones en otra carpeta
Establece
out: path/to/translationsen la Action; por defecto usa la carpeta del archivo de origen.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.
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é formatos de archivo lee?
La ayuda de kaeris check lista JSON, ARB, YAML, .strings, .xcstrings, .po, Android XML, CSV, XLIFF, .properties, .resx, Fluent y Markdown como formatos de origen (kaeris 0.2.35 y posteriores). Guías por formato
¿Qué hace que el trabajo falle?
El código de salida de kaeris check: 0 limpio, 1 se encontró un problema, 2 uso incorrecto o un archivo que no puede leer. Un problema que la verificación llama rojo hace fallar el trabajo; strict hace que las claves desactualizadas también fallen. Referencia de GitHub Action
Seguir adelante
Otras recetas: GitLab CI · pre-commit · Scripts Make y npm
Referencia de CLI · Referencia de Check · Referencia de GitHub Action · Verificación gratuita en el navegador · Traducir en el navegador