原文
WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。地域設定の実装の参考にしてください。
関連ファイル
内容を地域設定するために、XAMLリソースとLocBamlを使用する
Using XAML Resources and LocBaml to Localize Content
WPFは、XAMLリソースに基づく、新しいリソースの地域設定の方法を導入しています。 XAMLドキュメント自体は、テキストに基づくXML文書です。それは、バイナリXAML(BAML)ドキュメントにコンパイルされます。 これらのBAMLドキュメントは、アプリケーションやコンポーネントのコンパイルされたアセンブリの内部に、リソースとして格納されます。 リソース・エントリになっているそれぞれのBAMLドキュメントと一緒に、Figure 7は、どのように、それぞれのBAMLドキュメントが、 出力アセンブリのリソースとして、格納されるかを図で示します。
FIGURE 7
WPFのコンパイルされたXAML(BAML)ドキュメントは、常に、ここに示されるように、.NET Reflectorでバイナリ・リソースとして読み込まれます。
コンパイルされたBAMLリソースは、Microsoftによって提供されている、LocBamlと呼ばれるツールを使用して、地域設定することができます。 LocBamlは、すべてのBAMLリソースから、一つのCSVテキストファイルに、それぞれのリソース値を抽出できます。 一旦、CSVファイルの抽出された値が、地域設定された場合、CSVファイルは、具体的なカルチャのサテライト・アセンブリで、地域設定されたBAMLリソースに結合できます。
LocBamlツールは、Microsoftによって、ソースコードが提供されているサンプル・アプリケーションです。 それを使用するために、サンプルをダウンロードし、それを構築して、続いて、あなたのアプリケーションの出力ディレクトリに、コピーを実行します。 そして、そこから、それを実行します。ここから、LocBamlをダウンロードします。 :http://msdn.microsoft.com/en-us/library/ms771568.aspx
WPFアプリケーションが、地域設定されている、そして、BAMLリソースが、地域設定されてすでに生成されている場合、 アプリケーションは、実行時に、中心となるUICultureスレッドに基づいて、地域設定されたBAMLリソースを読み込むことになります。 ( Figure 8を参照)。基本的に、XAMLドキュメントが読み込まれるとき、ランタイムは、XAMLドキュメントの地域設定されたバージョンを読み込みます。 地域設定されたリソースを1つの要素、あるいは、プロパティに、一度で、描画するResxリソースと比較して、BAMLの方法は、きわめて効果的です。
FIGURE 8:
BAMLリソースは、完全に地域設定されたドキュメントとして、サテライト・アセンブリから提供されます。
これは、LocBamlの地域設定の背後にある重要な概念です。それぞれのリソース・キーをリソース・エントリにマッピングするよりはむしろ、 XAMLドキュメント全体は、1つの大きいリソース・コンテナとして扱われます。 開発者として、これは、あなたが、指定されていない言語を使用して、コンテンツの地域設定に特定の注意を払うことなく、 アプリケーションを作成できることを示しています。あなたは、単純に、指定されていないカルチャのために、 静的テキストをページに組み込みます。そして、LocBamlは、 後で、一度に、地域設定のための関連したコンテンツを外へ取り出すことについて心配します。 時間を地域設定するとき、あなたは、アプリケーションの、すべてのXAMLドキュメントから、一つの地域設定可能なCSVファイルに、 すべての地域設定可能なリソースをエクスポートすることができます。
CSVファイルは、あなたのすべてのXAMLドキュメントから、すべてのテキストを含むアプリケーションで、 すべての静的コンテンツ、ならびに、動でXAML文書に設定されたレイアウトに関するWidth、Height、Margin、Paddingや 何かのように、非常にわずかなフォーマット情報が含まれています。
ここで重要な点は、指定されていないカルチャのCSVを、サポートされた言語とカルチャの各々に地域設定することは、ローカライザ次第です。 一般的に、これは、カルチャの特別なバージョンにCSVファイル、 そして、テキストエディターやCSV編集ツールのCSVファイルの更新処理テキストの名前を変更することを表します。
一旦、地域設定が完了する場合、地域設定されたCSVファイルは、BAMLリソースの後ろに結合する必要があります。 LocBamlは、コンパイルされたリソース(.resourcesファイル)か、与えられたカルチャの完全なサテライト・アセンブリのどちらかを作成する/generateオプションを提供します。 あなたが、実際に、LocBamlで地域設定して、Resxリソースを持っていない場合、あなたのプロジェクトでは、直接、サテライト・アセンブリにコンパイルは、最も簡単です。 あなたが、Resxアセンブリを使用している場合、あなたは、Resxリソースを生成された、BAMLリソースと組み合わせる必要があります。 LocBamlは、常に、どんな既存のアセンブリ・ファイルでも上書きします。後の処理のために、アセンブリ・リンカを呼び出し、一時的なビルド・フォルダからResxリソースを選択し、組み合わせる必要があります。 .resourcesファイルは、LocBamlの/generateオプションによって作成します。LocBamlの地域設定の流れは、Figure 9で示されます。
FIGURE 9:
LocBamlで地域設定することは、かなり厳密な段階的な方法が含まれています。
LocBamlの地域設定プロセスは、かなり厳密で、段階的な方法の後に続きます。 実際に、Microsoftによって提供されるツールを用いる処理も、1つの方法です。 一旦、あなたが、XAMLリソースをCSVにエクスポートして、地域設定すると、 すでに、CSVファイルの地域設定されたバージョンに、別のLocBamlのエクスポートを戻して、再同期させるためのサポートがありません。 すでに、地域設定されたリソースに、2つ目のエクスポートしたリソースに再同期させるプロセスは、完全にあなた次第です。
この理由のため、あなたが、CSVファイルのためのカスタム同期ツールを構築しない限り、それは安全と言えます。 LocBamlの地域設定のプロセスは、1つの方法です: あなたは、まず最初にアプリケーションの解放を完了するべきです。 続いて、LocBamlでコンテンツを地域設定し、最後に、アップデートされたリソースでアプリケーションをコンパイルします。 これは、ビルド・プロセスを設定することが必要です。 あなたが、アプリケーションをコンパイルするたびに、それは適切なサテライト・アセンブリにBAMLリソースを結合します。
LocBamlの地域設定プロセスは、Microsoftが、サポートされていないサンプル・アプリケーションによって、 最小のツールのサポートをだけを提供したので、少し大雑把です。 LocBamlは、リソース・アセンブリのバイナリBAMLドキュメントに置き換える複雑なプロセスに基づいています。 そのツール自体は、同様に、いくつかの制限を受けます。:これは、どんな依存するアセンブリでも見つけ出すために、 目標とするアプリケーションの出力フォルダを使い果たす必要があります。 そして、XAMLは、バイナリ・コンテンツを表現することができないので、非テキストのコンテンツはどれでも、 ゆるいリソースやResxファイルのどちらかのどこかに格納する必要があります。