.NETの.resxリソースファイルを翻訳する
.resxファイルはテキストとアイコンなどの型付きリソースを1つのXMLに混在させています。KAERISは文字列のみを翻訳し、それ以外はバイト単位でそのまま残し、{0}形式の項目をチェックします。
KAERISはこのページを翻訳し、すべての行を逆翻訳して確認しました。ネイティブスピーカーによるレビューはまだ行われていません。 英語原文
.resxファイルの構造
XMLの<root>内に<data name="…"><value>…</value></data>のエントリがあります。typeやmimetype属性を持つエントリ(アイコンや画像)はテキストではありません。SaveButton.Textのような名前はWinFormsのコントロールプロパティです。
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype"><value>text/microsoft-resx</value></resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Welcome back, {0}!</value>
<comment>{0} is the user's first name</comment>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>You have {0} items in your cart.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Save and close</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
.resx翻訳で注意すべき点
型付きエントリはテキストではない
以下の実際の実行例の
AppIconエントリはファイル参照です。出力にそのままコピーされ、翻訳には送られません。フォーマット項目
string.Formatの{0}は必ず戻ってきます。以下の実際の実行例では両方とも戻り、欠落があれば報告されます。キーはテキストではない
SaveButton.Textのような名前はWinFormsのコントロールプロパティです。キーとしてそのまま保持され、翻訳されません。コメントはソースに残る
<comment>要素は翻訳ファイルに引き継がれません。翻訳者への注釈はソースリソースに残してください。
実際の実行例:ドイツ語に翻訳しチェック
実際の実行例、2026年10月27日、手動編集なし:kaeris translate Strings.resx --langs deをkaeris 0.2.35で2.6秒、モデルはopenai/gpt-4.1-mini(サービスのフォールバックモデルがこのジョブに応答)。以下に書き出したドイツ語ファイルとkaeris checkの結果を示します。
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="WelcomeMessage" xml:space="preserve">
<value>Willkommen zurück, {0}!</value>
</data>
<data name="ItemsInCart" xml:space="preserve">
<value>Sie haben {0} Artikel in Ihrem Warenkorb.</value>
</data>
<data name="SaveButton.Text" xml:space="preserve">
<value>Speichern und schließen</value>
</data>
<data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\app.ico;System.Drawing.Icon, System.Drawing</value>
</data>
</root>
$ kaeris check --source Strings.resx --langs de ✓ de: complete & placeholder-safe ✓ all locales complete & placeholder-safe
KAERIS が行うこと
文字列のみ
型付きおよびバイナリエントリは上記の実際の実行例のようにそのまま保持されます:
AppIconエントリは変更されずに戻りました。DTDとエンティティは拒否される
DOCTYPEやエンティティ宣言を含むファイルは解析前に拒否されます。これはXLIFFやAndroid XMLと共通のガードです。
この形式の無料チェック
無料チェックページの/checkはこの形式を読み込み、キーやアカウントなしで実行できます。ターミナルコマンド
kaeris checkも同様に読み込みます:kaeris 0.2.35以降の13形式すべてに対応し、同じルールでどこにも送信しません。
3ステップで実行する
CLIをインストールする
pip install kaerisを実行します。リソースファイルを翻訳する
kaeris translate Resources/Strings.resx --langs de,jaを実行してください。結果をチェックする
ソースと翻訳された.resxを無料チェックページにアップロードしてください。
pip install kaeris kaeris translate Resources/Strings.resx --langs de,ja --verify
よくある質問
アイコンやその他の型付きリソースは変更されますか?
いいえ。typeまたはmimetype属性を持つエントリはそのまま保持されます。
要素は保持されますか?
いいえ:翻訳ファイルにはそれらを除いて書き込まれます。ソースファイルには保持されます。
無料ですか?
はい、アカウントなしで:ファイルあたり 10,000 文字、実行あたり最大 8 言語。無料の API キーでファイル制限が 50,000 文字に引き上げられます。一度限りの生涯プランは 79 ドルで、ご自身の OpenRouter キーを使用します。月額プランは 19 ドルから。 料金
ターミナルや CI から実行できますか?
はい。pip install kaerisの後、kaeris translate Resources/Strings.resx --langs de,jaを実行します。GitHub Actionはプルリクエスト内で同じ翻訳を実行します。CLIドキュメント · GitHub Action
続ける
CLIリファレンス · チェックリファレンス · ブラウザで翻訳 · 無料チェック · フォーマット変換 · 疑似ローカリゼーション
他のフォーマット: JSON · YAML · .po · ARB · XLIFF · .strings · .xcstrings · .properties · CSV · Markdown · Fluent · Android XML