原文
WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。地域設定の実装の参考にしてください。
関連ファイル
BAMLとResxリソースを結合する
BAML and Resx Resources Combined
あなたが、XAMLとResxリソースを持っている場合、処理はさらに複雑です。 すでに、それが存在する場合、直接、LocBamlのサテライト・アセンブリにコンパイルすると、アセンブリは上書きされます。 残念ながら、あなたが、プロジェクトでResxリソースを持っている場合、de\WpfLocalizationLocBaml.resources.dllは、すでに存在します。 そして、それらのコンパイルされたResxリソースが含まれています。 LocBaml.exe /generateを実行して、サテライト・アセンブリを作成すると、既存のアセンブリを上書きします。 そして、あなたは、処理の中でResxリソースを失います。カッコ良くありません。
ResxとXAMLリソースを共存させるために、あなたは、アセンブリ・リンカ(al.exe)を使用して、 コンパイルされたBAMLとResxリソースを手動でリンクさせます。LocBamlは、未加工のバイナリ・リソース・データ・ファイルである.resourcesファイルを作成します。 そして、それらを、プロジェクトが中間の\objフォルダで作成した、任意の.resourceファイルに結合します。 一般的なドイツ(de)サテライト・アセンブリの両方と一緒にBAMLとResxリソースを構築する処理は、バッチファイルで、次のようになります。( 1行目のそれぞれの両方のコマンド):
LocBaml.exe /generate ..\..\obj\WpfLocalizationLocBaml.g.de.resources
/trans:..\..\Res\de.csv
/out:de /culture:de
al /template:WpfLocalizationLocBaml.exe
/embed:de\WpfLocalizationLocBaml.g.de.resources
/embed:..\obj\WpfLocalization.Properties.Resources.de.resources
/culture:de /out:de\WpfLocalizationLocBaml.resources.dll
ここにある、最終的なアセンブリよりも、LocBamlは、.resourcesファイルを生成します。 あなたは、続いて、アセンブリ・リンカを実行します。 ( C:\Program Files\Microsoft SDKs\Windows\v6.0A\binのWindows SDKの部分) どんなResxリソースにも、生成されたBAML .resourcesファイルを結合します。 あなたのプロジェクトが、使用している可能性があります。Resxリソースは、あなたのプロジェクトの中間のobjフォルダに生成されます。 そして、あなたは、resource拡張子を加えて、適切なファイル名とカルチャによって、それらを選択することができます。 あなたのプロジェクトのResources.de.resxファイルは、 WpfLocalizationLocBaml.Properties.Resources.de.resourcesの完全なリソース・パスのファイル名を持っています。 パスが既定のプロジェクトの名前空間がある場所で、リソースのフォルダ・パスを加えて、 さらに.resources拡張子を加えて、点によって切り離されるすべてカルチャ、 あなたが、正確な名前に自信がない場合、\objフォルダを確認して、あなたのカルチャ内で、 あらゆる.resourcesファイルも検索します。残念ながら、/embedフラグは、ワイルドカードが使えません。 それで、あなたが、あなたのプロジェクトに、1つ以上のResxリソース・ファイルを持っている場合、 あなたは、追加の/embed スイッチを手動で追加する必要があります。
私たちは、まだ、楽しんでいますか?あなたが、地域設定しているそれぞれのカルチャの実行を繰り返す必要があることを忘れないでください。 -ここで、一つの地域設定されたカルチャを示します。
あなたは、この処理を少し自動化するために、バッチファイルを使用したい可能性があります。 Figure 15は、部分的に一般的なバッチファイルを示します。 あなたは、コマンドウィンドウやビルド作業から、カルチャとファイル名のパラメータで呼び出すことができます。
FIGURE 15:
部分的に一般的なバッチファイルは、一つのカルチャのために、ResxとBAMLリソースの両方を生成するための手順を表示します。
REM Template for embedding BAML and RESX resources into localized assembly
REM 地域設定されたアセンブリに、BAMLとResxリソースを埋め込むためのテンプレート
REM Pass: a locale (de) and main file name (WpfLocalization)
REM パス:場所(de)と中心となるファイル名(WpfLocalization)
REM ASSUME: additional resource files beyond Properties.Resources.Resx
REM 想定:Properties.Resources.Resx以上のリソース・ファイルを追加します。
REM add them to al.exe command line
REM それらを、al.exeのコマンド・ラインCLSに追加します。
CLS
echo off
REM Parm1 is culture to translate to
REM Parm1は、以下に、変換するためのカルチャです。
REM Assumes: RES folder with de-DECSV file
REM 想定:Resフォルダと非DECSVファイル
REM Assumes: Global Resources for de-DE exist
REM 想定:de-DEのためのGlobal Resourceは、culture=deに設定されています。
set culture=de
if NOT "%1" == "" (set culture=%1)
echo Culture: %culture%
set filename=WpfLocalizationLocBaml
if NOT "%2" == "" (set filename=%2)
echo Filename: %filename%
REM object path for compiled raw .resource files
REM コンパイルされた未加工の.resourceファイルのための、オブジェクト・パス
set objPath=..\..\obj\debug
set objrelPath=..\...\obj\release
REM Generate raw .resource file in de-DE path so we can manually merge it with
ERM 私たちが、それを手動で結合することができる、de-DEパス内の未加工の.resourceファイルを生成します
LocBaml.exe /generate %objPath%\%filename%.g.en-US.resources
/trans:..\..\Res\%culture%.CSV /out:%culture% /culture:%culture%
REM Combine resource files
REMリソース・ファイルを結合します
al /template:"%filename%.exe" /embed:%culture%\%filename%.g.%culture%.resources
/embed:%objPath%\%filename%.Properties.Resources.%culture%.resources
/culture:%culture% /out:%culture%\%filename%.resources.dll
REM remove the intermediate resource file
REM 中間のリソース・ファイルを取り除きます
REM del "%culture%\%filename%.g.%culture%.resources"
pause
あなたは、あなたがもつ地域設定のそれぞれのカルチャのために、あなたのプロジェクトの後処理のような、これを追加することができます。:
$(TargetDir)LocBaml_CreateResourceAssembly_MixedBamlResx.bat de
$(TargetDir)LocBaml_CreateResourceAssembly_MixedBamlResx.bat fr
このバッチファイルは、多くの前提条件が発生します。:
- それは、ターゲットディレクトリー(\Debugや\Release)から実行する必要があります。
- LocBaml.exeは、同じフォルダの中に存在する必要があります。
- 地域設定されたCSVファイルは、culture.csv(すなわち、de.csv)という名前をつけられて、\Resフォルダに格納されます。
- それは、既定の言語が、en-US(あなたの選択された既定のカルチャ間で変更される)であることを想定します。
- それは、アセンブリ・リンカ(al.exe)が、あなたの環境パスの中にあることを想定します。
- あなたは、al.exeで/embedコマンドで、手動でResxリソースを追加します。
先程説明したバッチファイルは、テンプレートとして機能する、簡単で汚い解決法です。 しかし、それは、あなたの具体的な環境のために、いくつかのわずかな修正を必要とします。 そのファイルは、LocBaml.exeと一緒に、\Debugと\Releaseの両方のフォルダへコピーする必要があります。