原文
WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。地域設定の実装の参考にしてください。
関連ファイル
ResourceManagerでリソースにアクセスする Accessing Resources with the ResourceManager
ResourceManager型は、既定で現在のスレッドのUICulture設定のリソースを読み込みます。 しかし、あなたは、同様に、特定のカルチャのResourceManagerを明示的に作成することができます。 ResourceManagerは、メモリにリソースを読み込んで、それぞれのResourceSetインスタンスをキャッシュに格納します。 それで、それらは、リソース・ストアから一度だけ読み込ます。 リソースは、明示的にアンロードするまで、あるいは、アプリケーション・ドメインがアンロードするまで、キャッシュに格納されます。
リソースにアクセスするために、あなたは、アプリケーションの中心となるアセンブリの1つで、 位置決めをされた具体的なResourceSetのために、ResourceManagerのインスタンスを作成します。 なぜなら、リソースは、再利用され、ResourceManagerは、一般的に、ResourceManagerインスタンスが、 staticと宣言されたResourceSetインスタンスを内部のキャッシュに格納します。:
public static ResourceManager ResGlobal = new ResourceManager("WpfLocalization.Properties.Resources", typeof(App).Assembly);
あなたは、続いて、このように、リソースにアクセスすることができます。:
string hello = ResGlobal.GetString("HelloWorld"); Bitmap bitmap = ResGlobal.GetObject("CountryFlag") as Bitmap;
リソースの設定は、リソースの完全な名前に対応する、文字に基づいたリソース・パスとして、 WpfLocalization.Properties.Resourcesのような、 コンストラクタで指定します。あなたは、同様に、リソースが読み込まれた、アセンブリを指定する必要があります。 必要に応じて、あなたは、同様に、具体的なカルチャを渡すことができます。 そして、パラメータが、省略される場合、例の中にあるように、現在のUICultureが、使用されます。
Visual Studio 2005以降では、同様に、厳格に型指定されたリソースクラスが作成されます。 それは、Resxファイルのリソースを厳格に型指定されたクラスにマッピングします。 それで、あなたは、リソースマネージャに、直接、アクセスする必要ありません。 これらのクラスは、あなたのために、基盤となる静的ResourceManagerインスタンスを管理します。 そして、それぞれのリソース・キーのための静的プロパティを公開します。 あなたが、MyResources.resxと呼ばれるリソース・ファイルを作成する場合、 Visual Studioは、それらのリソースにアクセスするために、 MyResources.designer.csとMyResourcesクラスで、厳格に型指定されたクラスを自動的に作成します。
厳格に型指定されたリソースを使用することは、未処理のResourceManager.GetString()を呼ぶより、 簡単です。それらが、Intellisenseで発見できるので、 そして、あなたが、有効なリソース・キーを参照していることを保証するために、コンパイル時の型検査を提供します。 次に示すは図は、厳格に型指定されたリソースを使用しています。:
// using WpfLocalization.Properties; string hello = Resources.HelloWorld; Bitmap bitmap = Resources.CountryFlag; Bitmap bitmap2 = Resources.ResourceManager.GetObject("CountryFlag") as Bitmap;
リソースマネージャの厳格に型指定されたリソースは、リソースを読み込むために、常に、現在のUICultureを使用します。 それで、UICultureが、ランタイムで変更される場合、これは、すぐに反射されます。 あなたが、具体的なカルチャのためのリソースを取得したい場合、あなたは、直接、クラス上でResourceManagerプロパティにアクセスし、 明示的に、ResourceManagerのメソッドを使用することができます。:
MessageBox.Show(WpfLocalization.Properties. Resources.ResourceManager.GetString("HelloWorld", new CultureInfo("de-DE")));
既定では、あなたが、Visual Studioを使用して、プロジェクトにResxリソースを追加するとき、 内部のクラスが作成されます。WPFを取り扱うため、生成されたクラスが、internalよりもむしろpublicとしてマークされていることは、 重要です。それで、WPFは、厳格に型指定されたリソースで、XAML結合を使用することができます。特に、あなたは、既定のResxFileCodeGeneratorの代わりに、 PublicResxFileCodeGeneratorを使用するために、Figure 6で示すように、 これらの厳格に型指定されたクラスを生成するためにカスタム・ツールを確実に設定してください。
FIGURE 6:
厳格に型指定されたリソースに、WPFの結合を有効にするために、あなたは、internalクラスより、 むしろpublicを生成するために、リソースでPublicResxFileCodeGeneratorを使用することを確認します。
あなたが、ソースに結合しているXAMLに、厳格に型指定されたリソースを使用したい場合、 それぞれのプロパティは、同様に、publicである必要があります。あなたが、リソースを生成するために、 カスタム・ツールを使用しない場合、あなたは、Visual StudioのResxリソース・エディタで、それぞれのプロパティのスコープを変更することができます。 アクセス修飾子によって、ツールバーにドロップします。
厳格に型指定されたリソースは、明確に、WPFのResxリソースに結合する重要な機能です。これは、さらに、この白書の後で、Resx結合の実装を説明します。