Home > C# > 目的別資料 > 地域設定

BAMLとResxリソースを結合する

WPFのための地域設定の手引き Localization Guidance for WPF

原文

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の両方のフォルダへコピーする必要があります。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」