方法 : アプリケーションをローカライズする
このチュートリアルでは、LocBaml ツールを使用してローカライズされたアプリケーションを作成する方法を示します。
メモ |
---|
LocBaml ツールは、本運用環境で使用できるアプリケーションではありません。いくつかのローカリゼーション API を使用してローカリゼーション ツールを記述する方法を示すサンプルです。 このトピックは、次のセクションで構成されています。
|
概要
ここでは、アプリケーションをローカライズする手順を示します。 まず、翻訳されるテキストを抽出できるようにアプリケーションを準備します。 テキストの翻訳後に、翻訳されたテキストを元のアプリケーションの新しいコピーにマージします。
要件
この説明においては、コマンド ラインから実行するコンパイラである Microsoft build engine (MSBuild) を使用します。
また、プロジェクト ファイルを使用するように指示されます。 MSBuild およびプロジェクト ファイルの使用方法については、「WPF アプリケーションのビルドと配置」を参照してください。
この説明におけるすべての例では、カルチャとして en-US (米国英語) が使用されます。 これにより、別の言語をインストールせずに例の手順を実行できます。
サンプル アプリケーションの作成
この手順では、ローカリゼーション対象のアプリケーションを準備します。 Windows Presentation Foundation (WPF) サンプルでは、この説明のコード例に使用される HelloApp サンプルが用意されています。 このサンプルを使用する場合は、LocBaml ツールのサンプルから Extensible Application Markup Language (XAML) ファイルをダウンロードします。
ローカリゼーションを開始する段階までアプリケーションを開発します。
MSBuild によって生成されるメイン アセンブリとサテライト アセンブリ (拡張子が .resources.dll のファイル) にニュートラル言語リソースが含まれるように、プロジェクト ファイルで開発言語を指定します。 HelloApp サンプルのプロジェクト ファイルは HelloApp.csproj です。 そのファイルでは、開発言語は次のように指定されています。
<UICulture>en-US</UICulture>
UID を XAML ファイルに追加します。 UID は、ファイルへの変更を追跡し、翻訳する必要がある項目を識別するために使用されます。 UID をファイルに追加するには、プロジェクト ファイルに対して updateuid を実行します。
msbuild /t:updateuid helloapp.csproj
UID が不足していないかどうか、または重複していないかどうかを検証するには、checkuid を実行します。
msbuild /t:checkuid helloapp.csproj
updateuid を実行すると、ファイルに UID が追加されます。 たとえば、HelloApp の Pane1.xaml ファイルでは、次のようになります。
<StackPanel x:Uid="StackPanel_1">
<TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>
<TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>
</StackPanel>
ニュートラル言語リソースのサテライト アセンブリの作成
ニュートラル言語リソースのサテライト アセンブリを生成するようにアプリケーションを構成した後で、アプリケーションをビルドします。 これにより、メインのアプリケーション アセンブリと、LocBaml でのローカリゼーションに必要なニュートラル言語リソースのサテライト アセンブリが生成されます。 アプリケーションをビルドするには、次の操作を行います。
HelloApp をコンパイルして dynamic-link library (DLL) を作成します。
msbuild helloapp.csproj
新しく作成されたメインのアプリケーション アセンブリ HelloApp.exe は次のフォルダーに配置されます。
C:\HelloApp\Bin\Debug\
新しく作成されたニュートラル言語リソースのサテライト アセンブリ HelloApp.resources.dll は次のフォルダーに配置されます。
C:\HelloApp\Bin\Debug\en-US\
LocBaml ツールのビルド
LocBaml のビルドに必要なファイルはすべて WPF サンプルにあります。 LocBaml ツールのサンプルから C# ファイルをダウンロードします。
コマンド ラインから、プロジェクト ファイル (locbaml.csproj) を実行してツールをビルドします。
msbuild locbaml.csproj
Bin\Release ディレクトリに移動して、新しく作成した実行可能ファイル (locbaml.exe) を検索します。 例 : C:\LocBaml\Bin\Release\locbaml.exe
LocBaml の実行時に指定できるオプションは次のとおりです。
parse または -p: BAML、リソース、または DLL ファイルを解析して .csv または .txt ファイルを生成します。
generate または -g: 翻訳されたファイルを使用して、ローカライズされたバイナリ ファイルを生成します。
out または -o [filedirectory]: 出力ファイル名。
culture または -cul [culture]: 出力アセンブリのロケール。
translation または -trans [translation.csv]: 翻訳またはローカライズされたファイル。
asmpath または -asmpath: [filedirectory]: XAML コードにカスタム コントロールが含まれている場合、カスタム コントロール アセンブリに asmpath を指定する必要があります。
nologo: ロゴまたは著作権情報を表示しないようにします。
verbose: 詳細モードの情報を表示します。
メモ ツールの実行時にオプションのリストが必要になった場合は、「LocBaml.exe」と入力して Enter キーを押します。
LocBaml を使用したファイルの解析
LocBaml ツールの作成が完了したので、このツールを使用して HelloApp.resources.dll を解析し、ローカライズされるテキスト コンテンツを抽出することができます。
LocBaml.exe を、アプリケーションの bin\debug フォルダー (メインのアプリケーション アセンブリが作成された場所) にコピーします。
サテライト アセンブリ ファイルを解析して、出力を .csv ファイルに保存するには、次のコマンドを使用します。
LocBaml.exe /parse en-US/HelloApp.resources.dll /out:Hello.csv
メモ 入力ファイル HelloApp.resources.dll が LocBaml.exe と同じディレクトリに存在しない場合は、両方のファイルが同じディレクトリに存在するようにいずれかのファイルを移動します。
LocBaml を実行してファイルを解析した場合、出力は、コンマ (.csv ファイルの場合) またはタブ (.txt ファイルの場合) で区切られた 7 つのフィールドで構成されます。 HelloApp.resources.dll を解析した .csv ファイルを次に示します。
HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;
HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World
HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World
7 つのフィールドは次のとおりです。
BAML 名。 ソース言語のサテライト アセンブリに対応する BAML リソースの名前です。
リソース キー。 ローカライズされたリソースの識別子です。
カテゴリ。 値の型です。 「ローカリゼーション属性とコメント」を参照してください。
読み取り可能。 ローカライザーが値を読み取ることができるかどうかを表します。 「ローカリゼーション属性とコメント」を参照してください。
変更可能。 ローカライザーが値を変更できるかどうかを表します。 「ローカリゼーション属性とコメント」を参照してください。
コメント。 値のローカライズ方法を判断するときに役立つ、値についての追加的な説明です。 「ローカリゼーション属性とコメント」を参照してください。
値。 目的のカルチャに翻訳するテキスト値です。
これらのフィールドと .csv ファイルの区切り値との対応付けを次の表に示します。
BAML 名
リソース キー
カテゴリ
読み取り可能
変更可能
コメント
値
HelloApp.g.en-US.resources:window1.baml
Stack1:System.Windows.Controls.StackPanel.$Content
Ignore
FALSE
FALSE
#Text1;#Text2
HelloApp.g.en-US.resources:window1.baml
Text1:System.Windows.Controls.TextBlock.$Content
None
TRUE
TRUE
Hello World
HelloApp.g.en-US.resources:window1.baml
Text2:System.Windows.Controls.TextBlock.$Content
None
TRUE
TRUE
Goodbye World
"コメント" フィールドには、いずれも値が含まれていません。フィールドに値が含まれていない場合、そのフィールドは空です。 また、先頭行の項目は、読み取りも変更も不可能で、"カテゴリ" の値は "Ignore" となっています。これらはいずれも、ローカライズできない値であることを示します。
解析したファイル (特に大きなファイル) で、ローカライズできる項目を見つけやすくするには、"カテゴリ"、"読み取り可能"、および "変更可能" で項目の並べ替えまたはフィルターを行います。 たとえば、読み取り不可および変更不可の値をフィルターで除外できます。
ローカライズ可能なコンテンツの翻訳
抽出されたコンテンツの翻訳に使用できる任意のツールを使用します。 この場合、リソースを .csv ファイルに書き込んで Microsoft Excel で表示し、翻訳による変更を最後の列 (値) に加えることなどをお勧めします。
LocBaml を使用した新しい .resources.dll ファイルの生成
LocBaml を使用して HelloApp.resources.dll を解析することで識別されたコンテンツは翻訳されており、元のアプリケーションにマージする必要があります。 generate または -g オプションを使用して、新しい .resources.dll ファイルを生成します。
次の構文を使用して、新しい HelloApp.resources.dll ファイルを生成します。 カルチャを en-US (/cul:en-US) としてマークします。
LocBaml.exe /generate en-US/HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US
メモ 入力ファイル Hello.csv が実行可能ファイル LocBaml.exe と同じディレクトリに存在しない場合は、両方のファイルが同じディレクトリに存在するようにいずれかのファイルを移動します。
C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll ディレクトリ内の古い HelloApp.resources.dll ファイルを新しく作成した HelloApp.resources.dll ファイルに置き換えます。
アプリケーションで "Hello World" および "Goodbye World" が翻訳されます。
別のカルチャに翻訳するには、翻訳先の言語のカルチャを指定します。 フランス語 (カナダ) に翻訳する方法の例を次に示します。
LocBaml.exe /generate en-US/HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA
メインのアプリケーション アセンブリと同じアセンブリで、新しいサテライト アセンブリを格納するためのカルチャ固有のフォルダーを新規作成します。 たとえば、フランス語 (カナダ) の場合、フォルダーは fr-CA となります。
生成されたサテライト アセンブリを新しいフォルダーにコピーします。
新しいサテライト アセンブリをテストするには、アプリケーションが動作するカルチャを変更する必要があります。 2 つの方法のいずれかでこれを行うことができます。
オペレーティング システムの地域設定を変更します ([スタート] ボタン | [コントロール パネル] | [地域と言語のオプション] の順にクリックします)。
アプリケーションで、次のコードを App.xaml.cs に追加します。
<Application xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" x:Class="SDKSample.App" x:Uid="Application_1" StartupUri="Window1.xaml"> </Application>
Imports System.Windows ' Application Imports System.Globalization ' CultureInfo Imports System.Threading ' Thread Namespace SDKSample Partial Public Class App Inherits Application Public Sub New() ' Change culture under which this application runs Dim ci As New CultureInfo("fr-CA") Thread.CurrentThread.CurrentCulture = ci Thread.CurrentThread.CurrentUICulture = ci End Sub End Class End Namespace
using System.Windows; // Application using System.Globalization; // CultureInfo using System.Threading; // Thread namespace SDKSample { public partial class App : Application { public App() { // Change culture under which this application runs CultureInfo ci = new CultureInfo("fr-CA"); Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; } } }
LocBaml の使用に関するヒント
カスタム コントロールを定義するすべての依存アセンブリを、LocBaml のローカル ディレクトリにコピーするか、GAC にインストールする必要があります。 これは、ローカリゼーション API がbinary XAML (BAML) を読み取る際に依存アセンブリにアクセスする必要があるためです。
メイン アセンブリが署名されている場合、生成されたリソース DLL を読み込むには、その DLL にも署名する必要があります。
ローカライズされたリソース DLL のバージョンは、メイン アセンブリと同期されている必要があります。
次の内容
ここでは、LocBaml ツールの使用方法について基本的な理解を深めました。 UID を含むファイルを作成できるようになりました。 また、LocBaml ツールを使用することにより、ファイルを解析してローカライズ可能なコンテンツを抽出し、コンテンツの翻訳後にそのコンテンツをマージする .resources.dll ファイルを生成することができます。 ここでは詳細については説明していませんが、LocBaml を使用してアプリケーションをローカライズするために必要な知識は得られました。