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 が作成される
- プロジェクトファイル(.csprojか.vbproj)にUICultureを追加
- 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
- csvファイルにローカライズするテキストを抽出 (locBAMLもコマンドプロンプトで使用)
- 実行ファイルと、ローカライズしたそれぞれのフォルダおよびその中のHelloApp.resources.dllを配置すれば、アプリケーション実行時にOSのロケールに応じて自動的に表示言語が変わります。
デフォルト ロケール(指定したロケール以外のロケールのときに使用するロケール) を指定するには、ソリューション エクスプローラのプロジェクトのPropertiesにあるAssemblyInfo.csにある次の行(32行目)のコメントを外してください。
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
すると、この場合は「en-US」がデフォルト ロケールになります。これをしないと、該当ロケールがないときに例外を投げて実行できません。
詳しくはSDKドキュメント(英語)を参照してください。
Comments
- Anonymous
June 19, 2011
There is free addin at http://easybaml.codeplex.com, with which BAML localization process is much easier.