LocBAML を使用せずに WPF アプリケーションをローカライズする最良の方法は何ですか?
-
01-07-2019 - |
質問
WPF アプリケーションをローカライズする良い方法はないようです。MSDN は、私の XAML に以下のようなものを散らかしていると考えているようです。 x:Uid
の場合は、CSV ファイルを生成してから、(サンプル コードを使用して) 新しいアセンブリを生成することが答えです。さらに悪いことに、このプロセスでは、画像、バイナリ BLOB (PDF ファイルなど)、またはコードに埋め込まれた文字列をローカライズする方法が取り上げられていません。
では、次のようなアプリケーションをローカライズするにはどうすればよいでしょうか。
- 複数のアセンブリが含まれています
- 画像やその他のバイナリ BLOB が含まれます (例:PDF ドキュメント) をローカライズする必要があります
- XAML にない文字列データが含まれています (例:
MessageBox.Show("Hello World");
)
解決
ここでは専門家ではありませんが、x:Uids を使用して xaml を「散りばめる」ことは、ローカライズするために必要な文字列テーブルの無意味なコードを Windows フォーム コードに「散りばめる」ことよりも悪いことではありません。
私が理解する限り、WPFアプリは依然として「文字列テーブル、画像などを含むすべてのフレームワークCLRリソース」をサポートしています。つまり、ローカライズされたリソースを持つことができます。
もちろん、この無意味な部分の多くを処理するマークアップ拡張機能を作成した場合は、はるかに簡単になります。 これを行っている人の例をここで見つけることができます。 そして 同様の解決策がもう 1 つあります。
他のヒント
利用可能な記事とコードを見てください。 ここ. 。LocBaml、カスタム マークアップ拡張機能、または添付プロパティを使用して、WPF アプリをローカライズするさまざまな方法について説明します。私の意見では、最良の解決策はマークアップ拡張機能と Resx リソースを使用することです。コードには、それを行うためのローカリゼーション フレームワークが含まれています。
前述のすべてのシナリオをサポートする古い「ResX」ファイルを使用できます。WPF アプリケーションでこれを実現する方法をここで説明します。
WPF アプリケーション フレームワーク (WAF) => ローカリゼーションサンプルを参照
Gnu GetText ユーティリティとサポート アプリケーションを試してください。します C# を生成する ResourceManager と ResourceSets に基づいたクラス、そしてもちろん、アプリケーションの他の部分 (Web ページ、ネイティブ コード、iPhone など) の翻訳を再利用できます。