softwareWPFアプリの文字列のローカライズ(多言語化)現在、英語と日本語のUI表示に対応する予定のWPFアプリの開発をしています。英語でGUIを実装していました。GUIの画面構成の変化が少なくなってきたので、そろそろ英語と日本語の二つの言語に対応することにしました。やってローカライズすればよいのでしょう。WPFアプリのローカライズはいろいろなところに情報はありますが、自分へのメモも兼ねて記録に残したいと思います。WPFアプリの文字列のローカライズです。ひとつ断っておきますが、ここで扱うのは文字列のローカライズです。Overview(英語))などは終わっているものとします。これらが完了していないと、文字列をローカライズしたとしても、文字化けしたり、GUIのレイアウトが崩れたり、ローカライズした文字列が一部しか表示されなかったりします。WPFアプリの文字列をローカライズする方法の代表的なものを挙げると以下のものがあります。LocBamlを使って後処理で対応する方法x:Uidを使う方法(Windowsストア向けアプリのローカライズと同じ方法リソースディクショナリを使う方法Resources.resxを使う方法などです。それぞれの方法を順番に確認します。Application(英語))です。大まかな手順は、UIをXAMLで構成するローカライズ対象要素にx:UID属性を付与する。LocBamlツールを使ってx:UID属性がついた要素をcsvファイルとしてエクスポートcsvファイルを各言語にローカライズLocBamlツールを使ってローカライズしたcsvファイルからサテライトアセンブリを作るです。この方法はここでは扱いませんので、説明は省略します。詳細な情報はマイクロソフトのサイトを参照してください。ここは日本語の説明で参考になると思います。x:Uidを使う方法(Windowsストア向けアプリのローカライズと同じ方法)x:Uidを使った方法について説明します。これは、1番で記載した旧来のWPFのローカライズ法のことではありません。ここで扱うx:Uidを使う方法は、XAMLを使用したWindowsストア向けアプリで利用されているローカライズ方法と同じ方法です。大まかな手順は、UIをXAMLで構成するローカライズしたいコントロールにx:Uid属性を追加する一つのResources.reswに1言語の文字列リソースを定義する。形式です対応するUI言語分のResources.reswファイルを用意するResources.reswを適切なフォルダ構成で配置するです。この方法では、例えばButtonコントロールをローカライズしたいときXAMLファイル上は以下のようにx:Uidを使って、ローカライズするUIのIDを指定します。file"/>そして、ローカライズ後の文字列はResources.reswファイルに設定します。Resources.reswファイルの名前のところは、コントロールのx:Uid属性に設定したIDとローカライズしたいそのコントロールの属性名(Attribute名)をドット(.)でつなぎます。上記のButtonコントールの場合は、以下のような設定をします。UIこのようにすることで、アプリの実行時にContent属性とFontFamily属性がResources.reswで設定したものに置き換わります。表示する文字列だけでなく、フォント名などもUI言語ごとに置き換えることができます。言語の切り替えは、適切なフォルダ構成でResources.reswファイル配置することにより、ユーザーのUI言語設定に従って自動的に行われます。アプリ実行時にはXAMLの属性に設定された文字列の代わりにResources.reswファイルに設定した文字列が優先して使われます。そのためXAMLファイル上の文字列は開発用の分かりやすい文字列に設定することができるので開発が楽になります。この方法はWPFアプリでは使えない方法で、Windowsストア向けアプリの方法なのにここまで説明したのは、「同じ仕組みをWPFでも使えたらよいのになぁ。