原文
WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。地域設定の実装の参考にしてください。
関連ファイル
LocBamlを使用して、CSVファイルにリソースをエクスポートする
Using LocBaml to Export Resources into a CSV file
次の手順は、CSVファイルに与えられたアセンブリで利用できる、すべてのXAMLリソースをエクスポートすることです。 これを処理するために、あなたは、LocBamlを使用する必要があります。Microsoftは、それに、先程、説明した、サンプル・アプリケーションを提供しました。 あなたが、プロジェクトのzipファイルをダウンロードする必要があることを思い出します。 フォルダにそれを解凍して、LocBaml.exeを作成するために、プロジェクトを構築します。
LocBaml.exeのコンパイルされたバージョンは、\toolsフォルダの下に、WpfLocalizationLocBamlサンプル・プロジェクトを提供します。
一旦、あなたが、LocBaml.exeをコンパイルすると、あなたは、対象とするフォルダ(bin/Debugやbin/Release)に、それをコピーする必要があります。 そして、Command WindowやPowershellからそれを実行します。 LocBamlは、見つけ出すために、あなたの中心となる実行可能形式のアプリケーションの出力フォルダで実行する必要があります。 そして、どんなプライベート・アセンブリの依存関係でも読み込みます。
en-USが、リソースのために、既定のカルチャとサテライト・アセンブリ出力として指定される場合、 bin\Debug\en-US\WpfLocalizationLocBaml.resources.dllアセンブリは、CSVファイルを作成するために、LocBaml.exeに入力されます。 あなたは、projectルートの下のResフォルダに、CSVファイル出力を送信することができます。 ここに、\bin\DebugフォルダからLocBamlを実行するコマンド・ラインの例があります。(一行すべてです。):
locbaml /parse en-US/WpfLocalizationLocBaml.resources.dll /out:../../res/en-US.csv
これは、Resフォルダにen-US.csvと呼ばれるファイルを作成します。フォルダが存在する必要があります。 あるいは、LocBamlは、失敗するでしょう。 出力は、アプリケーションのすべてのXAMLドキュメントで、すべてのリソースのために、コンマで区切られたエントリが含まれています。 あなたが、かなり大きなプロジェクトを持っている場合、このファイルは、非常に大きくなります。 1行の未加工の出力は、次のように見えます。(1行のそれぞれのこれらの2つの項目):
WpfLocalizationLocBaml.g.en-US.resources:simpleform.baml,
mnuFile:System.Windows.Controls.MenuItem.$Content,Menu,
True,True,,#mnuSave;#mnuExit;
WpfLocalizationLocBaml.g.en-US.resources:simpleform.baml,
mnuFile:System.Windows.Controls.HeaderedItemsControl.Header,Menu,
True,True,,_File
コンテンツは、テキストに埋め込まれるコンマと改行の明らかな問題を回避するために、部分的にエンコードすることができます。コンマや改行が含まれるものは何でも、 二重引用符に埋め込まれています。(「このテキストは、コンマを持っています」)、そして、クォートは、"になります。ここに、コンマとクォートによる行の例があります。:
WpfLocalizationLocBaml.g.en-US.resources:test.baml,WindowMessage:
System.Windows.Controls.TextBlock.$Content,Text,True,True,,
"In the following text blocks the display is always in the OS culture,
and not the current culture which is displayed as the first item.
Testing a some "quoted text as well".
次に示される、常に、OSカルチャ内、そして、現在のカルチャでないではない、テキストブロックは、最初の項目のように表示されます。 いくつかのwell"のような、"引用符のついたテキストを検証します。;"
LocBamlからエクスポートされたテキストは、安全にエンコードされます。しかしながら、あなた次第です。 そして、あなたは、完全に同じフォーマットを保持してコンテンツの地域設定するために、あなたがドキュメントを編集するように、どんなツールでも使用します。 誤って、コンマを追加したり、文字列をエスケープするのを忘れることで、CSVファイルフォーマットを簡単に壊すことができます。 あなたが使用するエディタの種類に応じて、エディタは、同様に、コンマやクォートで文字列を適切にエンコードしない場合があります。 気をつけて、頻繁にバックアップしてください。
CSVファイルのそれぞれのエントリのための実際のフィールドは、Figure 14に示されます。
FIGURE 14:
エクスポートされたCSVファイルのLocBamlフィールド
CSVフィールド | 説明 |
1. Baml Document | リソースが含まれているBAMLドキュメント |
2. Resource ID | 完全に条件つきのウィンドウ関係したResource ID |
3. Category | リソースのタイプのカテゴリー |
4. Readable | ローカライザへのVisible |
5. Modifiable | ローカライザによるModifiable |
6. Comments | 地域設定のコメント |
7. Value | リソースの値 |
あなたが、テキストエディターでファイルを開く場合、それぞれコンテンツの行はかなり長いです。 そして、実際のコンテンツを、IDや雑音から切り離すことは困難です。 あなたが、一般的に興味を持っているセルは、1,2と7と多分6でしょう。 それで、それは、同様に、CSVファイルの列を再び並べ直す機能を持つことに役立ちます。
ほとんどのCSVエディタは、幸いなことに、UTF-8に書式を設定されたCSVファイルを読み込みます。 しかし、それを、現在のWindows ANSIコードページで、ディスクに戻して保存します。 (Windows 1252のような)あなたが、覚えておく限り、UTF-8にドキュメントを変換するために、 CSVを編集するツールを使用することができます。あなたが、それらに対してLocBamlを実行する前に、 さもなくば、あなたは、大文字のASCII文字のために、おかしく見える記号を得ることになります。 Visual Studioのエディタは、実際に、エンコード形式との間でドキュメントを変換することに非常に優れています。 あなたは、ドキュメントをUTF-8に変換するオプションでエンコードすることで、Save As | Saveを使用することができます。 あなたが、CSVエディタで遊ぶ機会があれば、あなたは、この機能が必要となるでしょう。
あなたが、CSVコンテンツの通知をより詳しく見ると、実際に、エクスポートされたリソースで共有されるテキストに比較して、 遙かに多くの情報があります。コンテナ船の情報があります。 例えば、実際に、最初のCSVの例で示されるメニュー・アイテムは、他の要素に参照(#mnuFile、#mnuExit)を持ちます。 それは、内容を構成します。同様に、余白、高さと幅、半径、位置合せとその他のような、多くの設定があります。 基本的に、どんな固定された値もエクスポートされます。 それで、あなたは、地域設定されたリソースに設定された内容が収まらない、潜在的な配置の問題を変更することができます。
これで、あなたは、地域設定データを通して、ドキュメントのレイアウトを変更できます。 それは、いくつかの特別な場合に役に立ちます。 しかし、あなたが、実際に、基盤となるユーザーインターフェースに変更を加える場合、扱いにくいです。 例えば、あなたが、書式を持っていると想像してください。 そして、その幅を、地域設定されたCSVファイルのより長いテキストフィールドに、対応するために変更します。 後で、あなたが、入ります。そして、実際の指定されていない言語のXAMLドキュメントを変更します。 そして、ハードコードされた幅を、完全に、取り除きます。そして、テキストを自動で流れるように動かせます。 指定されていない言語では、現在、テキストは自動で流れるように動きます。 そして、地域設定されたバージョンが、まだ、同じ場所に持っているハードコードされた幅の大きさを調整します。 そして、あなたは、効果的に、2つの異なるユーザーインターフェースの動作になります。 あなたが、明示的に、地域設定されたCSVファイルで作成されたどんな変更も更新しない限り、 元にした文書を手に入れるのは、かなり簡単です。そして、地域設定された内容の同期とは、無関係です。
異なるカルチャで異なる振る舞いを避けるために、地域設定でテキストでないプロパティ値の使用を最小にすることを、お勧めします。 それは、通常、基盤となる既定のカルチャのドキュメントを修正する方がよいでしょう。 それは、具体的なカルチャを『修正する』と試みるよりも、すべてのカルチャで動作します。