Traduire les fichiers de locale i18next et JSON
Le JSON de locale est imbriqué, et ses chaînes contiennent des variables comme {{name}}. Un outil qui ne voit que du texte peut renommer une clé, aplatir l'imbrication ou traduire la variable. KAERIS renvoie le fichier dans la même structure, avec chaque variable à sa place.
KAERIS a traduit cette page et vérifié chaque ligne en la retraduisant. Un locuteur natif ne l'a pas encore revue. Original anglais
Comment un fichier JSON de locale est construit
Un fichier par langue (en.json, de.json), ou un par espace de noms (locales/en/common.json). Les clés sont le contrat avec votre code, donc seules les valeurs sont traduites. i18next écrit les formes plurielles comme des clés séparées (inbox_one, inbox_other) ; next-intl, Vue I18n et FormatJS les placent dans une seule chaîne ICU.
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
Ce à quoi il faut faire attention dans les traductions JSON
Variables en trois orthographes
{{name}}dans i18next,{name}dans les bibliothèques de style ICU,%sou${x}ailleurs. Une variable manquante apparaît comme un blanc dans l'application en cours d'exécution, pas comme une erreur.Les pluriels nécessitent plus de formes dans certaines langues
L'anglais a deux formes. Le russe, le polonais et l'arabe en nécessitent de trois à six. Avec les chaînes ICU, la vérification gratuite signale une forme manquante pour ru, uk, pl, cs, sk, hr, sr, lt, ro, ar, lv, sl et he, ainsi qu'une branche exacte abandonnée telle que
=0. Avec les clés suffixées d'i18next, votre fichier a besoin des clés supplémentaires que la langue possède ; KAERIS traduit les clés qu'il trouve.Références et balisage à l'intérieur d'une valeur
$t(nav.cart)d'i18next,@:nav.shopde vue-i18n, les balises<0>…</0>du composant Trans et le HTML brut doivent tous survivre. L'exemple ci-dessous montre une perte réelle de ce type exact.Notes pour vous-même
Une clé dont le chemin contient un segment commençant par
_(_comment,_status) est traitée comme une clé de service et n'est pas traduite par défaut, en JSON, YAML et ARB.
Une exécution réelle, avant et après
Une exécution réelle : notre fichier de test de 97 chaînes, allemand, 26 octobre 2026, réduit à quatre clés. La dernière ligne montre une perte que la vérification a détectée lors de cette exécution.
{
"ph": {
"mustache": "Hi {{firstName}}, your order {{orderId}} has shipped.",
"reactTrans": "By continuing you accept our <0>Terms</0> and <1>Privacy Policy</1>.",
"nesting": "$t(nav.cart) has been updated"
},
"icu": {
"copiesLeft": "{count, plural, =0 {Sold out} one {Only # copy left} other {Only # copies left}}"
}
}
{
"ph": {
"mustache": "Hallo {{firstName}}, Ihre Bestellung {{orderId}} wurde versendet.",
"reactTrans": "Durch die fortgesetzte Nutzung stimmen Sie unseren <0>Nutzungsbedingungen</0> und <1>Datenschutzrichtlinien</1> zu.",
"nesting": "Der Warenkorb wurde aktualisiert"
},
"icu": {
"copiesLeft": "{count, plural, =0 {Ausverkauft} one {Nur noch # Exemplar} other {Nur noch # Exemplare}}"
}
}
error ph.nesting: lost placeholder $t(nav.cart)
Ce que KAERIS en fait
Même fichier, même structure
Les clés, l'imbrication et l'ordre restent tels qu'ils sont dans votre fichier source ; seules les valeurs changent. Fonctionne avec les fichiers i18next, Vue I18n, next-intl et FormatJS.
Variables comptées sans IA
Après traduction, une simple vérification de comptage compare chaque variable et chaque balise à l'original. Une ligne qui en a perdu une est marquée et affichée en haut.
Chaque ligne retraduite
Avec
--verify, chaque résultat est retraduit dans votre langue et un second modèle juge si le sens a changé. Vous lisez ce que chaque ligne dit maintenant.Seulement les nouvelles clés
kaeris translate --only-newtraduit les clés nouvelles et modifiées ;kaeris.lockà côté de la source conserve le reste. JSON et ARB.
Exécutez-le en trois étapes
Installer le CLI
Exécutez
pip install kaeris. Aucun compte n'est nécessaire pour les limites gratuites.Traduire le fichier
Exécutez
kaeris translate en.json --langs de,ja --verify. Les fichiersde.jsonetja.jsonapparaissent à côté de la source.Vérifier le résultat
Exécutez
kaeris check --source en.json --langs de,ja. Il se termine avec le code 1 si une variable, un nombre ou une clé est incorrect, afin que la CI puisse arrêter la fusion.
pip install kaeris kaeris init --preset i18next kaeris translate en.json --langs de,ja --verify kaeris check --source en.json --langs de,ja
Questions
Quels formats JSON sont compatibles ?
Fichiers clé-valeur plats et imbriqués, tels qu'utilisés par i18next, Vue I18n, next-intl et FormatJS. Le niveau supérieur doit être un objet, comme {"greeting": "Hello"}. Les tableaux de chaînes sont également traduits.
Conserve-t-il les références {{count}} et $t(…) ?
Les variables et les références sont comparées à la source après traduction. Une ligne qui en a perdu une est signalée ; l'exemple ci-dessus montre une exécution réelle où $t(nav.cart) a été omis et la vérification l'a détecté.
Est-ce gratuit ?
Oui, sans compte : 10 000 caractères par fichier et jusqu'à 8 langues par exécution. Une clé API gratuite augmente la limite de fichiers à 50 000 caractères. La licence à vie est de 79 $ une fois, sur votre propre clé OpenRouter ; les plans mensuels commencent à 19 $. Tarifs
Puis-je l'exécuter depuis le terminal ou en CI ?
Oui. pip install kaeris, puis kaeris translate en.json --langs de,ja. Le GitHub Action exécute la même traduction dans une pull request. Docs CLI · GitHub Action
Continuer
Référence CLI · Référence Check · Traduire dans le navigateur · Vérification gratuite · Convertir les formats · Localisation fictive
Autres formats : YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML