Traduci file di localizzazione i18next e JSON
Il JSON di localizzazione è nidificato e le sue stringhe contengono variabili come {{name}}. Uno strumento che vede solo testo può rinominare una chiave, appiattire il nidificamento o tradurre la variabile. KAERIS restituisce il file nella stessa forma, con ogni variabile al suo posto.
KAERIS ha tradotto questa pagina e controllato ogni riga ritraducendola. Un madrelingua non l'ha ancora revisionata. Originale in inglese
Come è costruito un file JSON di localizzazione
Un file per lingua (en.json, de.json), o uno per namespace (locales/en/common.json). Le chiavi sono il contratto con il tuo codice, quindi solo i valori vengono tradotti. i18next scrive le forme plurali come chiavi separate (inbox_one, inbox_other); next-intl, Vue I18n e FormatJS le inseriscono in una singola stringa ICU.
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
Cosa osservare nelle traduzioni JSON
Variabili in tre grafie
{{name}}in i18next,{name}nelle librerie in stile ICU,%so${x}altrove. Una che manca appare come uno spazio vuoto nell'app in esecuzione, non come un errore.I plurali richiedono più forme in alcune lingue
L'inglese ha due forme. Russo, polacco e arabo ne richiedono da tre a sei. Con le stringhe ICU il controllo gratuito segnala una forma mancante per ru, uk, pl, cs, sk, hr, sr, lt, ro, ar, lv, sl e he, e un ramo esatto interrotto come
=0. Con le chiavi suffisso di i18next, il tuo file necessita delle chiavi aggiuntive che la lingua ha; KAERIS traduce le chiavi che trova.Riferimenti e markup all'interno di un valore
i18next
$t(nav.cart), vue-i18n@:nav.shop, tag<0>…</0>del componente Trans e HTML semplice devono sopravvivere. L'esempio seguente mostra una perdita reale di questo tipo.Note per te stesso
Una chiave il cui percorso ha un segmento che inizia con
_(_comment,_status) viene trattata come una chiave di servizio e non viene tradotta per impostazione predefinita, in JSON, YAML e ARB.
Una vera esecuzione, prima e dopo
Una vera esecuzione: il nostro file di test di 97 stringhe, tedesco, 26 ottobre 2026, ridotto a quattro chiavi. L'ultima riga mostra una perdita che il controllo ha rilevato in quella esecuzione.
{
"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)
Cosa fa KAERIS con esso
Stesso file, stessa forma
Chiavi, nidificamento e ordine rimangono come nel tuo file sorgente; solo i valori cambiano. Funziona con file i18next, Vue I18n, next-intl e FormatJS.
Variabili contate senza AI
Dopo la traduzione, un semplice controllo di conteggio confronta ogni variabile e tag con l'originale. Una riga che ne ha persa una viene contrassegnata e mostrata in cima.
Ogni riga tradotta indietro
Con
--verifyogni risultato viene ritradotto nella tua lingua e un secondo modello giudica se il significato è cambiato. Leggi cosa dice ora ogni riga.Solo le nuove chiavi
kaeris translate --only-newtraduce le chiavi nuove e modificate;kaeris.lockaccanto al sorgente ricorda le altre. JSON e ARB.
Eseguilo in tre passaggi
Installa la CLI
Esegui
pip install kaeris. Non è necessario un account per i limiti gratuiti.Traduci il file
Esegui
kaeris translate en.json --langs de,ja --verify. I filede.jsoneja.jsonappaiono accanto al sorgente.Controlla il risultato
Esegui
kaeris check --source en.json --langs de,ja. Esce con codice 1 se una variabile, un numero o una chiave è errata, così la CI può fermare il merge.
pip install kaeris kaeris init --preset i18next kaeris translate en.json --langs de,ja --verify kaeris check --source en.json --langs de,ja
Domande
Quali layout JSON funzionano?
File chiave-valore piatti e nidificati, come usati da i18next, Vue I18n, next-intl e FormatJS. Il livello superiore deve essere un oggetto, come {"greeting": "Hello"}. Anche gli array di stringhe vengono tradotti.
Mantiene i riferimenti {{count}} e $t(…)?
Variabili e riferimenti vengono confrontati con il sorgente dopo la traduzione. Una riga che ne ha persa una viene segnalata; l'esempio sopra mostra una vera esecuzione in cui $t(nav.cart) è stato perso e il controllo lo ha rilevato.
È gratuito?
Sì, senza account: 10.000 caratteri per file e fino a 8 lingue per esecuzione. Una chiave API gratuita aumenta il limite di file a 50.000 caratteri. A vita costa $79 una tantum, sulla tua chiave OpenRouter; i piani mensili partono da $19. Prezzi
Posso eseguirlo dal terminale o in CI?
Sì. pip install kaeris, poi kaeris translate en.json --langs de,ja. La GitHub Action esegue la stessa traduzione in una pull request. Documentazione CLI · GitHub Action
Continua
Riferimento CLI · Riferimento Check · Traduci nel browser · Controllo gratuito · Converti formati · Pseudo-localizzazione
Altri formati: YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML