LocBAML
WPFアプリケーションを多言語化(ローカライズ)する方法には2種類あります。ひとつはリソース(文字列テーブル)を使う方法で、もうひとつはLocBAMLツールとMSBuildを使う方法です。LocBAMLはSDKのサンプルにあるツールですが、実際のローカライズにも使えます。
LocBAMLを使ったローカライズは次の手順で行います。
-
msbuildを使ってリソースDLLを作成
-
プロジェクトファイル(.csprojか.vbproj)にUICultureを追加
<UICulture>ja-JP<UICulture>
-
XAMLファイルにuidを追加 (msbuildはコマンドプロンプトで使用)
> msbuid /t:updateuid HelloApp.csproj
> msbuild /t:checkuid HelloApp.csproj (チェックのみ)
-
リソースDLLを作成
> msbuild HelloApp.csproj
bin\debug(release)\ja-JP\HelloApp.resources.dll が作成される
-
SDKサンプルにあるLocBAMLをビルドする
-
LocBAMLを使ってローカライズ (ここでは<TextBlock >こんにちは</TextBlock>があるとする)
-
csvファイルにローカライズするテキストを抽出 (locBAMLもコマンドプロンプトで使用)
> LocBAML.exe /parse HelloApp.resources.dll /out:.\Hello.csv
csvファイルの出力例「HelloApp.g.ja-JP.resources:window1.baml, Text1:System.Windows.Controles.TextBlock.$Content, None, TRUE, TRUE,,こんにちは」
-
bin\debug(release)\en-US フォルダを作成して、HelloApp.exeとLocBAML.exeとHello.csvをコピー
-
csvファイルを編集、たとえば
「HelloApp.g.en-US.resources:window1.baml, Text1:System.Windows.Controles.TextBlock.$Content, None,T RUE, TRUE, , Hello」
-
新しいdllを作成
> LocBAML.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US
-
実行ファイルと、ローカライズしたそれぞれのフォルダおよびその中のHelloApp.resources.dllを配置すれば、アプリケーション実行時にOSのロケールに応じて自動的に表示言語が変わります。
デフォルト ロケール(指定したロケール以外のロケールのときに使用するロケール) を指定するには、ソリューション エクスプローラのプロジェクトのPropertiesにあるAssemblyInfo.csにある次の行(32行目)のコメントを外してください。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
すると、この場合は「en-US」がデフォルト ロケールになります。これをしないと、該当ロケールがないときに例外を投げて実行できません。
詳しくはSDKドキュメント(英語)を参照してください。
マイクロソフト㈱エバンジェリスト。北海道大学理学部物理学科卒。リアルタイム3Dグラフィックスを専門とし、グラフィックスやシェーダに関する技術文章を執筆・講演。 DirectX SDK日本語ドキュメントの開発に携わるとともに、Windows Presentation Foundation プログラミング(オーム社)、Game Programming Gemsシリーズ、リアルタイム レンダリング第2版(ボーンデジタル)、Texturing & Modeling, A Procedural Approach などを翻訳・監修、XAMLプログラミング(ソフトバンク クリエイティブ)を執筆。趣味は薪割り。