Comprueba las traducciones antes de publicarlas
Se ejecuta en tu máquina, no necesita clave y no envía nada a ningún sitio. Encuentra variables perdidas como {name}, números cambiados, claves faltantes y líneas vacías. Con errores sale con el código 1, para que la CI pueda detener la fusión; una línea vacía es solo un aviso y da el código 1 únicamente con --strict.
npx kaeris check --source en.json --langs de
Sin Python: npx ejecuta el paquete npm con Node 18 o posterior. Con Python, pip install kaeris da el mismo comando kaeris check.
{
"greeting": "Hallo!",
"delete": "50 Dateien löschen",
"save": "",
"terms": "Lies unsere <b>AGB</b>"
}
✗ de: 1 placeholder mismatch(es): greeting: missing ['{name}'], added - ✗ de: 3 translation fault(s): greeting: lost placeholder {name} delete: number 50 appears in the translation but not the source delete: number 5 from the source is missing or changed in the translation ! de: 1 warning(s): save: empty translation — the source has text ✗ 1 placeholder mismatch, 3 translation faults
Fuente: {"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}
| Flag | Significado |
|---|---|
--strict | Falla también con avisos (por ejemplo, una traducción vacía) y con claves extra que no están en la fuente. |
--pattern '{lang}/common.json' | Dónde están las traducciones. Por defecto: donde las escribe translate, junto al archivo fuente (de.json, app_de.arb, values-de/strings.xml). |
--json | Resultado legible por máquina en lugar del informe. |
--sarif kaeris.sarif | También escribe un informe SARIF 2.1.0 para GitHub, ver más abajo. |
Archivo fuente: cualquiera de los 13 formatos (JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent). Códigos de salida: 0 sin problemas, 1 problemas encontrados, 2 uso incorrecto o un archivo que no puede leer.
Guías por formato: JSON · YAML · PO · XLIFF · ARB · .strings · .xcstrings · Fluent · .properties · .resx · CSV · Markdown · Android XML
CI recipes (in English): GitHub Actions · GitLab CI · pre-commit · Make and npm scripts
Glosario: una palabra por término y por idioma
--keep deja una palabra tal cual. Cuando un término debe traducirse, pero siempre igual, ponlo en kaeris-glossary.json junto a kaeris.json. translate pasa las palabras acordadas al modelo y check falla si una traducción usa otra palabra.
{"terms": [
{"term": "workspace", "pos": "noun",
"note": "the shared project area, not a desk",
"translations": {"de": "Arbeitsbereich",
"fr": "espace de travail",
"ru": "рабочее пространство"}},
{"term": "KAERIS", "keep": true}
]}
→ Glossary: 1 term(s), 1 kept as is ✗ fr: 1 translation fault(s): open: glossary: "workspace" should be "espace de travail" ! ru: 1 warning(s): leave: glossary: "workspace" should be "рабочее пространство" — not found, not even as an inflected form; check this line ✗ 1 translation fault
Fuente: {"open": "Open the workspace", "leave": "Leave the workspace"}. La traducción francesa dice «bureau»; la rusa, «рабочей области».
Un término cuenta como palabra completa: Pro no se encuentra en «product». Una forma flexionada de la palabra acordada pasa. Donde las palabras cambian de forma o se unen en compuestos (ruso, polaco, alemán y otros), una ausencia es un aviso y no un error, porque puede seguir siendo gramática correcta. Una lista de palabras da variantes aceptadas. Funciona en todos los planes, incluida la demo gratuita.
Hallazgos en la línea, dentro de la pull request
Con --sarif cada hallazgo se convierte en una nota en la línea exacta del archivo de idioma, junto a los comentarios de tu revisor.
- uses: kaeris-io/kaeris-action@v1
with:
mode: check
source: locales/en.json
languages: de,fr,es
sarif-file: kaeris.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: kaeris.sarif
"greeting": "Hallo, {name}!",
- "delete": "5 Dateien löschen",+ "delete": "50 Dateien löschen",KAERIS i18n · delete: number 5 from the source is missing or changed in the translation "save": "Änderungen speichern"
El informe se escribe incluso en una ejecución limpia, porque upload-sarif falla cuando el archivo falta. Las notas en la línea son gratuitas en repositorios públicos; los privados necesitan GitHub Advanced Security. Sin él, la comprobación sigue funcionando: el trabajo falla y el registro enumera cada hallazgo.
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