WPF のグローバリゼーション

このトピックでは、グローバル市場向けに Windows Presentation Foundation (WPF) アプリケーションを開発するときに注意するべき問題を紹介します。 グローバリゼーション プログラミング要素は、.NET の System.Globalization 名前空間に定義されています。

XAML グローバリゼーション

Extensible Application Markup Language (XAML) は XML に基づいており、XML 仕様で定義されているグローバリゼーション サポートが利用されます。 以下のセクションでは、注意するべき XAML 機能についていくつか説明します。

文字参照

文字参照は、特定の Unicode 文字の UTF16 コード ユニットを、10 進数または 16 進数で表したものです。 次の例は、コプト語の大文字のホリ (つまり 'Ϩ') の 10 進の文字参照を示しています。

Ϩ

次は、16 進数の文字参照の例です。 16 進数の前には x が付くことに注意してください。

Ϩ

エンコード

XAML でサポートされているエンコードは、ASCII、Unicode UTF-16、および UTF-8 です。 エンコード ステートメントは XAML ドキュメントの最初に配置されます。 エンコーディング属性が存在せず、バイト順もない場合、パーサーでは既定として UTF-8 が使用されます。 UTF-8 と UTF-16 は優先エンコードです。 UTF-7 には対応していません。 次の例は、XAML ファイルで UTF-8 エンコードを指定する方法を示しています。

?xml encoding="UTF-8"?

言語属性

XAML は xml:lang を利用し、要素の言語属性を表します。 CultureInfo クラスを利用するには、言語属性値が CultureInfo で事前定義されたカルチャ名のいずれかである必要があります。 xml:lang は要素ツリーで継承可能であり (XML ルールによる継承であり、必ずしも依存関係プロパティの継承によるものではありません)、その既定値は、明示的に割り当てられていない場合、空の文字列になります。

言語属性は、地域の言語を指定するときに非常に役立ちます。 たとえば、フランス語であれば、フランス、ケベック、ベルギー、スイスでスペル、語彙、発音が異なります。 また、中国語、日本語、韓国語は Unicode のコード ポイントを共有していますが、表意文字の形が異なり、まったく別のフォントが使用されます。

次の Extensible Application Markup Language (XAML) 例では、fr-CA 言語属性を利用し、カナダのフランス語を指定します。

<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>

Unicode

XAML は、サロゲートを含むすべての Unicode 機能をサポートしています。 文字セットを Unicode にマッピングできるのであればサポートされます。 たとえば、GB18030 では、一部の文字が中国語、日本語、韓国語 (CFK) の拡張 A および B とサロゲート ペアにマッピングされているため、完全に対応しています。 WPF アプリケーションでは、StringInfo を使用して、サロゲート ペアまたは結合文字があるかどうかを知らなくても文字列を操作できます。

XAML で各国対応ユーザー インターフェイスを設計する

このセクションでは、アプリケーションの開発時に考慮するべきユーザー インターフェイス (UI) 機能について説明します。

国際対応テキスト

WPF には、Microsoft .NET Framework でサポートされているすべての書記体系の組み込み処理が含まれています。

現在、次の書体がサポートされています。

  • アラビア語

  • ベンガル語

  • デバナガリ

  • キリル言語

  • ギリシャ語

  • グジャラート語

  • グルムキー

  • ヘブライ語

  • 表意文字スクリプト

  • カナラ語

  • ラオス語

  • ラテン語

  • マラヤーラム語

  • モンゴル語

  • オディア語

  • シリア語

  • タミール語

  • テルグ語

  • ターナ

  • タイ語*

  • チベット語

\* このリリースでは、タイ語テキストを表示し、編集できますが、単語を分割することはできません。

現在、次のスクリプトはサポートされていません。

  • クメール語

  • 韓国語の古いハングル

  • ミャンマー

  • シンハラ語

すべての書記体系エンジンは OpenType フォントをサポートしています。 OpenType フォントには、OpenType レイアウト テーブルを追加できます。このテーブルを追加すると、フォントの作成時、洗練された国際対応の印刷フォントの設計能力が上がります。 OpenType フォント レイアウト テーブルには、グリフ代用、グリフ配置、位置揃え、基線配置に関する情報が含まれています。テキスト処理アプリケーションでテキスト レイアウトを改善できます。

OpenType フォントでは、Unicode エンコードを使用して大きなグリフ セットを処理できます。 このようなエンコードにより、広範な国際対応が可能になり、さまざまなグリフを印刷できます。

WPF のテキスト レンダリングには、解像度に依存しない Microsoft ClearType サブピクセル テクノロジが採用されています。 これにより読みやすさが大幅に向上し、あらゆる書体で高品質の雑誌スタイルの書面を作成できます。

国際対応レイアウト

WPF では非常に便利な方法で横書きレイアウト、双方向レイアウト、縦書きレイアウトを作成できます。 プレゼンテーション フレームワークでは、FlowDirection プロパティを使用してレイアウトを定義できます。 フローの方向パターン:

  • LeftToRight - ラテン語や東アジア言語などのための横書きレイアウト。

  • RightToLeft - アラビア語やヘブライ語などのための双方向レイアウト。

ローカライズ可能なアプリケーションの開発

世界中で利用されるアプリケーションを開発するときは、アプリケーションをローカライズ可能にすることを忘れてはなりません。 後続のトピックで、考慮事項を指摘します。

多言語ユーザー インターフェイス

多言語ユーザー インターフェイス (MUI) は、UI をある言語から別の言語に切り替えるための Microsoft サポートです。 WPF アプリケーションはアセンブリ モデルを利用して MUI をサポートします。 1 つのアプリケーションに言語に依存しないアセンブリと言語に依存するサテライト リソース アセンブリが含まれます。 エントリ ポイントはメイン アセンブリのマネージド .EXE です。 WPF リソース ローダーは、Framework のリソース マネージャーを利用し、リソースのルックアップとフォールバックをサポートします。 多言語サテライト アセンブリは同じメイン アセンブリと連動します。 読み込まれるリソース アセンブリは、現在のスレッドの CurrentUICulture によって変わります。

ローカライズ可能なユーザー インターフェイス

WPF アプリケーションでは、XAML を使用してその UI を定義します。 XAML を使用すると、開発者は、一連のプロパティとロジックを使用してオブジェクトの階層を指定できます。 XAML の主な用途は WPF アプリケーションの開発ですが、共通言語ランタイム (CLR) オブジェクトの階層を指定するために使用できます。 ほとんどの開発者は XAML を利用してアプリケーションの UI を指定し、C# などのプログラミング言語を利用してユーザーの操作に応答します。

リソースの観点からは、UI はリソース要素であり、そのため、その最終的な配布形式はローカライズ可能にして外国の言語に対応できるようにする必要があります。 XAML はイベントを処理できないため、多くの XAML アプリケーションにはコード ブロックが含まれ、イベントを処理します。 詳細については、「WPF の XAML」を参照してください。 XAML ファイルがトークン化され、XAML の BAML 形式になるとき、コードは分解され、異なるバイナリにコンパイルされます。 XAML ファイル、画像、その他の種類の管理対象リソース オブジェクトの BAML 形式はサテライト リソース アセンブリに組み込まれます。サテライト リソース アセンブリに組み込むことで、他の言語にローカライズできます。ローカライズが必要なければ、メイン アセンブリに組み込まれます。

注意

WPF アプリケーションは、文字列テーブルやイメージなど、あらゆる FrameworkCLR リソースに対応しています。

ローカライズ可能なアプリケーションの構築

ローカリゼーションとは、異なる文化に合わせて UI を調整することです。 開発者は、WPF アプリケーションをローカライズ可能にするために、ローカライズ可能なすべてのリソースをリソース アセンブリに組み込む必要があります。 リソース アセンブリはさまざまな言語にローカライズされ、コードビハインドでリソース管理 API が使用されて読み込まれます。 WPF アプリケーションに必要なファイルの 1 つは、プロジェクト ファイル (.proj) です。 アプリケーションで使用するすべてのリソースをプロジェクト ファイルに含める必要があります。 その方法を .csproj ファイルからの次の例で示します。

<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>

アプリケーションでリソースを使用するには、ResourceManager をインスタンス化し、使用するリソースを読み込みます。 この方法を次の例に示します。

void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

ローカライズされたアプリケーションで ClickOnce を使用する

ClickOnce は Visual Studio 2005 に付属する Windows フォームの新しい展開技術です。 アプリケーションをインストールしたり、Web アプリケーションをアップグレードしたりできます。 ClickOnce で展開されたアプリケーションがローカライズされると、ローカライズされたカルチャでのみ表示できます。 たとえば、展開されたアプリケーションが日本語にローカライズされている場合、日本語の Microsoft Windows でのみ表示できます。英語の Windows では表示できません。 これは問題になります。日本のユーザーが英語版の Windows を実行することは珍しくないためです。

この問題の解決策は、非依存言語フォールバック属性を設定することです。 アプリケーション開発者はメイン アセンブリからリソースを任意で削除し、特定のカルチャに対応するサテライト アセンブリでそのリソースを見つけられるように指定できます。 このプロセスを制御するには、NeutralResourcesLanguageAttribute を使用します。 NeutralResourcesLanguageAttribute クラスのコンストラクターには 2 つのシグネチャがあります。1 つは、UltimateResourceFallbackLocation パラメーターを受け取り、ResourceManager でフォールバック リソースを抽出する場所 (メイン アセンブリまたはサテライト アセンブリ) を指定するものです。 この属性を使用する方法の例を次に示します。 最終的なフォールバックの場所の場合、コードにより、ResourceManager は現在実行中のアセンブリのディレクトリの "de" サブディレクトリ内のリソースが検索されます。

[assembly: NeutralResourcesLanguageAttribute(
    "de" , UltimateResourceFallbackLocation.Satellite)]

関連項目