原文
WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。地域設定の実装の参考にしてください。
関連ファイル
あなたのVisual Studioプロジェクトで、地域設定を有効にする
Enabling Localization in your Visual Studio Project
既定では、WPFプロジェクトのBAML地域設定機能は、Visual Studioで無効にされています。 そして、コンパイラは、分離したリソース・サテライト・アセンブリに、地域設定されたBAMLリソースをエクスポートしません。 あなたのプロジェクトで、地域設定を有効にすることは、2段階の手順です。 まず、あなたは、プロジェクト・ファイルにUICulture設定を追加します。 次に、あなたは、アセンブリの指定されていないリソースに言語を設定します。
WPFプロジェクトで認識するカルチャを作成する最初の手順は、あなたのプロジェクト・ファイルで、指定されていない
FIGURE 11:
あなたのVS Projectが要求するBAML地域設定は、あなたの指定されていないカルチャに
一旦、あなたが、この値を追加し、プロジェクト・ファイルを閉じます。そして、再びプロジェクト・ノードを右クリックして、Reload Projectを選択します。
次の手順は、既定のカルチャ代替システムとアセンブリ代替システムの位置を設定することです。 これを処理するために、あなたのWPFプロジェクトに属しているAssemblyInfo.csを開き、次の行のコメントを解除します。:
[assembly: NeutralResourcesLanguage("en-US",
UltimateResourceFallbackLocation.Satellite)]
指定されたカルチャは、そのリソースがエンコードされるen-USのような、プロジェクトのXAMLファイルの既定のカルチャであるべきです。
ここに値は、プロジェクト・ファイルの
指定されていないサテライト・アセンブリとResxリソース
Neutral Satellite Assemblies and Resx Resources
中心となるアセンブリに格納されたResxリソースは、既定の設定や指定されていないリソースとして知られています。 そして、すべての他のカルチャ固有のリソースは、サテライト・アセンブリに格納されます。 UlitmateFallbackLocation.Satelliteを使用して、リソース代替システムの動作を変更します。 必要とする既定のリソースは、別々のサテライト・アセンブリを格納します。これは、Resxリソースが動作するとき、設定するまれなものです。 そして、あなたが、既定のサテライト・アセンブリを提供するように気をつけない場合、 それは、実行時に、あなたのアプリケーションに見つかっていない、Resxリソースに関する問題を引き起すでしょう。
Resxリソースのために、これは、あなたが、必要な既定のリソースを提供する、Resources.resxのようなカルチャを指定していないResxファイルに頼ることができないことを示しています。 代わりに、あなたは、省略時設定のリソースの設定を代表している、具体的なカルチャResources.en-US.resxのための、リソースを与える必要があります。 しかしながら、あなたが、同様に、厳格に型指定されたリソースを望む場合、 あなたは、同様に、Visual Studioがカルチャを指定していないResxファイルから厳格に型指定されたリソースを生成するため、 指定されていないResources.resxファイルを提供する必要があります。結局は、これは表します。 あなたは、Resources.resxとResources.en-US.resxを必要とします。たとえ、両方のファイルが同じリソースを持ったとしても、 これは、あなたのプロジェクトと手段に、すべてのリソース・ファイルが適用されます。 あなたは、これらの2つのファイルの同期を維持するために、頻繁に、コピーする必要があります。
同様に、あなたが、このようなリソースに静的な結合を使用している場合、 Expression Blendが、サテライト・アセンブリ内で静的リソースに結合できないことに注意します。:
content="{x:Static props:Resources.HelloWorld}")
Blendは、指定されていないResxリソースを持つサテライト・アセンブリにアクセスすることができないので、常にエラーを表示することになります。 ( Figure 12を参照)。しかしながら、同じレイアウトは、Visual Studioデザイナーで動作します。
FIGURE 12:
Resxリソース結合は、サテライト・アセンブリを使用するとき、Expression Blendでは失敗します。
UltimateFallbackLocation.Satellite設定が、代替システムとして「en-US」リソースを示す場合、 続いて、サテライト・アセンブリは、適切に代替システムが動作するため、プロジェクトの出力ディレクトリの下の\en-USフォルダの下に存在する必要があります。 Figure 13は、プロジェクトのWpfLocalizationLocBamlで、既定のen-USカルチャのための、サテライト・アセンブリのコンテンツを示します。
FIGURE 13:
リソースは、あなたのプロジェクトで、地域設定を有効にしてコンパイルしたとき、エクスポートされます。(このプロジェクトには、BAMLとResxリソースが含まれています。)
BAMLとResxリソースの両方が、リソース・アセンブリに格納されることに注意します。 BAMLリソースは、一つのリソース設定にすべてを読み込みます。 ( WpfLocalizationLocBaml.g.en-US.resources ) リソース・アセンブリで、リソース設定には、WPFプロジェクトに追加された資産に加えて、すべてのXAMLドキュメントが含まれています。 それは、Resourceビルドの動作を使用します。(自動的に、プロジェクト資産に適用されます)。Figure 13で、 それは、同様に、WpfLocalizationLocBaml.Properties.Resourcesのために含まれている、1つのResxリソース設定があります。 それは、Resources.en-US.resxで定義される、すべてのそれぞれのリソース・キーに含まれます。
既定では、コンパイラは、設定された指定されていない、リソース・サテライト・アセンブリのために、このようなBAMLリソース・サテライト・アセンブリだけを作製するでしょう。 他のカルチャのためのサテライト・アセンブリは、他のカルチャのために存在するResxリソースのためだけに作成されます。 すでに説明されているように、BAMLリソースは、手動で作成する必要があります。 そして、サテライト・アセンブリに後で追加された地域設定は、LocBaml /generateを使用して完全なものになります。
あなたが、すぐわかるように、これはビルド・プロセスにいくつかの複雑さを追加する原因になります。 この点を再検討すると、BAMLリソースと組み合わせることで、Resxリソースの使用を避けることができる場合、そうしてください。 それは、地域設定を作成するでしょう。そして、LocBamlの状況のために、ほんのわずかすっきりしたプロセスを構築します。 立派な目標ですが、これは、常にできるわけではありません。 あなたが、ゆるいバイナリ・リソースを使用できる間、( Visual Studioで、リソースに動作を組み込みます) 画像のような、どんなリソース・コンテンツでも格納します。これらのリソースは、地域設定できません。 あなたは、それが、サテライト・アセンブリに含まれるように、適切に地域設定されたファイル名で、 それぞれのコンテンツ・アイテムのコピーを配置する必要があります。 あなたが、地域設定可能なバイナリ・リソースを必要とする場合、続いて、 あなたは、BAMLリソースと組み合わせてResxを使用する必要があることは、あなたの唯一の選択肢です。