Xcode String Catalog (.xcstrings) を翻訳する
String Catalog はすべての言語を1つの JSON ファイルに保持し、手動で編集すべきは Xcode のみです。KAERIS は新しい言語を同じファイルに追加し、それ以外は元のままにします。
KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文
String Catalog の構造
1つのファイルに strings、次にキー、localizations、そして言語が続きます。各言語は複数形用の stringUnit または variations を持ちます。ファイルには comment、extractionState、shouldTranslate も含まれます。ソース言語のエントリがないキーはそれ自体がソーステキストです。
{
"sourceLanguage" : "en",
"strings" : {
"Welcome back, %@!" : {
"comment" : "Greeting on the home screen",
"extractionState" : "manual",
"localizations" : {
"en" : { "stringUnit" : { "state" : "translated", "value" : "Welcome back, %@!" } }
}
},
"%lld items" : {
"localizations" : {
"en" : {
"variations" : {
"plural" : {
"one" : { "stringUnit" : { "state" : "translated", "value" : "%lld item" } },
"other" : { "stringUnit" : { "state" : "translated", "value" : "%lld items" } }
}
}
}
}
},
"Cancel" : { }
},
"version" : "1.0"
}
.xcstrings 翻訳で注意すべき点
単なる JSON として読み込まないでください
一般的な JSON としてフラット化すると
strings.welcome.localizations.en…のようなキーになり、翻訳済みに見えますが Xcode は読み込めません。KAERIS はこのフォーマット専用のリーダーを持っています。言語ごとの複数形のバリエーション
英語は
oneとother、ロシア語はfewとmanyも必要、アラビア語は6種類すべて必要です。README に展開方法が記載されています。%lldは元の位置に残ります。Xcode が書いたものはそのままに
コメント、抽出状態、ファイル内の既存言語、
shouldTranslate: falseとマークされたものは変更せずに保持されます。フォーマット指定子
%@、%lld、%1$@は翻訳後にソースと比較されます。
実際の実行例:ドイツ語に翻訳しチェック
実際の実行例、2026年10月27日、手動編集なし: kaeris translate Localizable.xcstrings --langs de を kaeris 0.2.35 で実行、2.4秒、モデルは openai/gpt-4.1-mini(サービスのフォールバックモデルがこのジョブに応答)。以下は生成されたドイツ語ファイルと kaeris check の結果です。
{
"sourceLanguage": "en",
"strings": {
"Welcome back, %@!": {
"comment": "Greeting on the home screen",
"extractionState": "manual",
"localizations": {
"en": {
"stringUnit": {
"state": "translated",
"value": "Welcome back, %@!"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Willkommen zurück, %@!"
}
}
}
},
"%lld items": {
"localizations": {
"en": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld item"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld items"
}
}
}
}
},
"de": {
"variations": {
"plural": {
"one": {
"stringUnit": {
"state": "translated",
"value": "%lld Artikel"
}
},
"other": {
"stringUnit": {
"state": "translated",
"value": "%lld Artikel"
}
}
}
}
}
}
},
"Cancel": {
"localizations": {
"de": {
"stringUnit": {
"state": "translated",
"value": "Abbrechen"
}
}
}
}
},
"version": "1.0"
}
$ kaeris check --source Localizable.xcstrings --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
KAERIS が行うこと
1つのファイルをその場で更新
kaeris translate Localizable.xcstrings --langs de,fr,jaは言語をカタログに書き込みます。言語ごとのファイルはありません。モデル用の ICU 複数形
チェック時に複数形のバリエーションは ICU 複数形として読み込まれ、失われた形が見えるようになります。
この形式の無料チェック
無料チェックページの/checkはこの形式を読み込み、キーやアカウントなしで実行できます。ターミナルコマンド
kaeris checkも同様に読み込みます:kaeris 0.2.35以降の13形式すべてに対応し、同じルールでどこにも送信しません。
3ステップで実行する
CLIをインストールする
pip install kaerisを実行します。カタログを翻訳する
kaeris translate Localizable.xcstrings --langs de,fr,jaを実行します。カタログはその場で更新されます。結果をチェックする
無料チェックページにカタログをアップロードしてください。ソースと翻訳を1つのファイルから読み込みます。
pip install kaeris kaeris translate Localizable.xcstrings --langs de,fr,ja --verify
よくある質問
既存の翻訳は上書きされますか?
ファイル内の既存言語、コメント、抽出状態は変更せずに保持されます。これは CLI の README にも記載されています。
複数形はどのように扱われますか?
複数形のバリエーションは各言語に必要なカテゴリに展開されます。英語の one/other はロシア語では one/few/many/other に、アラビア語では6形態に展開されます。
無料ですか?
はい、アカウントなしで:ファイルあたり 10,000 文字、実行あたり最大 8 言語。無料の API キーでファイル制限が 50,000 文字に引き上げられます。一度限りの生涯プランは 79 ドルで、ご自身の OpenRouter キーを使用します。月額プランは 19 ドルから。 料金
ターミナルや CI から実行できますか?
はい。pip install kaeris の後、kaeris translate Localizable.xcstrings --langs de,ja を実行します。iOS も参照してください。GitHub Action はプルリクエストで同じ翻訳を実行します。CLI ドキュメント · GitHub Action
続ける
CLIリファレンス · チェックリファレンス · ブラウザで翻訳 · 無料チェック · フォーマット変換 · 疑似ローカリゼーション
その他のフォーマット: JSON · YAML · .po · ARB · XLIFF · .strings · .properties · .resx · CSV · Markdown · Fluent · Android XML