i18nextおよびJSONロケールファイルを翻訳
ロケールJSONはネストされており、その文字列には{{name}}のような変数があります。テキストのみを見るツールは、キーの名前を変更したり、ネストをフラット化したり、変数を翻訳したりできます。KAERISは、すべての変数が元の場所にある状態で、ファイルを同じ形状で返します。
KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文
ロケールJSONファイルの構築方法
言語ごとに1つのファイル(en.json、de.json)、または名前空間ごとに1つのファイル(locales/en/common.json)。キーはコードとの契約であるため、値のみが翻訳されます。i18nextは複数形を別々のキー(inbox_one、inbox_other)として書き込みます。next-intl、Vue I18n、FormatJSはそれらを1つのICU文字列にまとめます。
{
"nav": { "greeting": "Welcome back, {{name}}!" },
"inbox_one": "{{count}} new message",
"inbox_other": "{{count}} new messages"
}
JSON翻訳で注意すべきこと
3つの表記法の変数
i18nextでは
{{name}}、ICUスタイルのライブラリでは{name}、その他では%sまたは${x}。これらが欠落すると、エラーではなく、実行中のアプリで空白として表示されます。複数形は言語によってより多くの形式が必要
英語には2つの形式があります。ロシア語、ポーランド語、アラビア語は3〜6必要です。ICU文字列の場合、無料チェックはru、uk、pl、cs、sk、hr、sr、lt、ro、ar、lv、sl、heの欠落している形式、および
=0のような正確な分岐の脱落をフラグ付けします。i18nextの接尾辞キーを使用する場合、ファイルには言語が持つ追加のキーが必要です。KAERISは検出したキーを翻訳します。値内の参照とマークアップ
i18nextの
$t(nav.cart)、vue-i18nの@:nav.shop、Transコンポーネントの<0>…</0>タグ、およびプレーンなHTMLはすべてそのまま残る必要があります。以下の例は、まさにこの種の実際の損失を示しています。自分用のメモ
パスに
_で始まるセグメント(_comment、_status)を持つキーは、サービスキーとして扱われ、デフォルトではJSON、YAML、ARBで翻訳されません。
実際の実行、実行前と実行後
実際の実行:97文字列のテストファイル、ドイツ語、2026年10月26日、4つのキーにカット。最後の行は、その実行で検出された損失を示しています。
{
"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)
KAERIS が行うこと
同じファイル、同じ形状
キー、ネスト、順序はソースファイルと同じままです。値のみが変更されます。i18next、Vue I18n、next-intl、FormatJSファイルで動作します。
AIなしでカウントされた変数
翻訳後、プレーンなカウントチェックにより、すべての変数とタグが元のものと比較されます。1つ失われた行はマークされ、上に表示されます。
各行を逆翻訳
--verifyを使用すると、すべての結果があなたの言語に逆翻訳され、2番目のモデルが意味が変わったかどうかを判断します。各行が現在何を言っているかを読み取ることができます。新しいキーと編集されたキーのみ
kaeris translate --only-newは、新しいキーと編集されたキーを翻訳します。ソースの隣にあるkaeris.lockが残りを記憶します。JSONとARB。
3ステップで実行する
CLIのインストール
pip install kaerisを実行します。無料制限にはアカウントは必要ありません。ファイルを翻訳
kaeris translate en.json --langs de,ja --verifyを実行します。de.jsonおよびja.jsonファイルがソースの隣に表示されます。結果をチェック
kaeris check --source en.json --langs de,jaを実行します。変数、数値、またはキーが間違っている場合、コード1で終了するため、CIはマージを停止できます。
pip install kaeris kaeris init --preset i18next kaeris translate en.json --langs de,ja --verify kaeris check --source en.json --langs de,ja
よくある質問
どのJSONレイアウトが機能しますか?
i18next、Vue I18n、next-intl、FormatJSで使用されるフラットおよびネストされたキーと値のファイル。トップレベルはオブジェクトである必要があります。例:{"greeting": "Hello"}。文字列の配列も翻訳されます。
{{count}}や$t(…)参照は保持されますか?
翻訳後、変数と参照はソースと比較されます。1つ失われた行はフラグ付けされ、上記の例は$t(nav.cart)が失われ、チェックがそれを検出した実際の実行を示しています。
無料ですか?
はい、アカウントなしで:ファイルあたり 10,000 文字、実行あたり最大 8 言語。無料の API キーでファイル制限が 50,000 文字に引き上げられます。一度限りの生涯プランは 79 ドルで、ご自身の OpenRouter キーを使用します。月額プランは 19 ドルから。 料金
ターミナルや CI から実行できますか?
はい。pip install kaerisを実行してからkaeris translate en.json --langs de,jaを実行します。GitHub Actionは、プルリクエストで同じ翻訳を実行します。CLIドキュメント · GitHub Action
続ける
CLIリファレンス · チェックリファレンス · ブラウザで翻訳 · 無料チェック · フォーマット変換 · 疑似ローカリゼーション
その他の形式:YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · .resx · CSV · Markdown · Fluent · Android XML