Traduire

Vérifier les traductions avant la mise en production

S'exécute sur votre machine, ne demande aucune clé et n'envoie rien nulle part. La commande trouve les variables perdues comme {name}, les nombres modifiés, les clés manquantes et les lignes vides. En cas d'erreur, elle se termine avec le code 1 pour que la CI puisse bloquer la fusion ; une ligne vide n'est qu'un avertissement et ne donne le code 1 qu'avec --strict.

Exécuter
npx kaeris check --source en.json --langs de

Sans Python : npx lance le paquet npm avec Node 18 ou plus récent. Avec Python, pip install kaeris fournit la même commande kaeris check.

de.json
{
  "greeting": "Hallo!",
  "delete": "50 Dateien löschen",
  "save": "",
  "terms": "Lies unsere <b>AGB</b>"
}
Sortiecode de sortie 1
✗ 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

Source : {"greeting": "Hello, {name}!", "delete": "Delete 5 files", "save": "Save changes", …}

OptionSignification
--strictÉchouer aussi sur les avertissements (une traduction vide, par exemple) et sur les clés en trop, absentes de la source.
--pattern '{lang}/common.json'Emplacement des traductions. Par défaut : là où translate les écrit, à côté de la source (de.json, app_de.arb, values-de/strings.xml).
--jsonRésultat lisible par machine au lieu du rapport.
--sarif kaeris.sarifÉcrit également un rapport SARIF 2.1.0 pour GitHub, voir ci-dessous.

Fichier source : l'un des 13 formats (JSON, YAML, .strings, .xcstrings, Markdown/MDX, .po, ARB, Android XML, CSV, XLIFF, .properties, .resx, Fluent). Codes de sortie : 0 propre, 1 problèmes trouvés, 2 utilisation incorrecte ou fichier illisible.

Guides par format: 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

Glossaire : un mot par terme et par langue

--keep laisse un mot tel quel. Quand un terme doit être traduit, mais toujours de la même façon, placez-le dans kaeris-glossary.json à côté de kaeris.json. translate transmet les mots convenus au modèle, et check échoue sur une traduction qui emploie un autre mot.

kaeris-glossary.json
{"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}
]}
Sortiecode de sortie 1
→ 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

Source : {"open": "Open the workspace", "leave": "Leave the workspace"}. La traduction française dit « bureau », la russe « рабочей области ».

Un terme compte comme un mot entier : Pro n'est pas trouvé dans « product ». Une forme fléchie du mot convenu est acceptée. Là où les mots changent de forme ou se soudent en composés (russe, polonais, allemand et d'autres), une absence est un avertissement et non une erreur, car la grammaire peut quand même être correcte. Une liste de mots donne des variantes acceptées. Disponible sur toutes les offres, démo gratuite comprise.

Les résultats sur la ligne, dans la pull request

Avec --sarif, chaque résultat devient une note sur la ligne exacte du fichier de langue, à côté des commentaires de votre relecteur.

.github/workflows/i18n-check.yml
- 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
locales/de.json · Files changed
  "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"

Le rapport est écrit même quand tout est propre, car upload-sarif échoue si le fichier manque. Les notes sur la ligne sont gratuites sur les dépôts publics ; les dépôts privés nécessitent GitHub Advanced Security. Sans cela, la vérification fonctionne quand même : le job échoue et le journal liste chaque résultat.

KAERIS a traduit cette page et vérifié chaque ligne en la retraduisant. Un locuteur natif ne l'a pas encore revue. Original anglais