次の方法で共有


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

ここでは、Windows Presentation Foundation (WPF) アプリケーションをグローバル市場向けに作成する際の注意点について説明します。 グローバリゼーションのプログラミング要素は、Microsoft .NET の System.Globalization に定義されています。

このトピックは、次のセクションで構成されています。

  • XAML のグローバリゼーション
  • XAML による各国対応ユーザー インターフェイスの設計
  • ローカライズ可能なアプリケーションの開発
  • ローカライズされたアプリケーションでの ClickOnce の使用
  • 関連トピック

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

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

文字参照コード

文字参照コードは、それによって表される特定の Unicode 文字の番号を 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"?

Language 属性

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 によって導入される文字は、CJK (Chinese, Japanese, and Korean) 統合漢字拡張 A および B とサロゲート ペアにマッピングされるため、GB18030 は完全にサポートされます。 WPF アプリケーションで StringInfo を使用すると、文字列にサロゲート ペアや組み合わせ文字があるかどうかに関係なく文字列を操作できます。

XAML による各国対応ユーザー インターフェイスの設計

ここでは、アプリケーションを作成する際に考慮する必要があるuser interface (UI) 機能について説明します。

各国対応テキスト

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

現在サポートされている書記体系を次に示します。

  • アラビア語

  • ベンガル語

  • デバナガリ

  • キリル語

  • ギリシャ語

  • グジャラート語

  • グルムキー

  • ヘブライ語

  • 表意文字

  • カナラ語

  • ラオス語

  • ラテン語

  • マラヤラム語

  • モンゴル語

  • オディア語

  • シリア語

  • タミル語

  • テルグ語

  • ターナ

  • タイ語*

  • チベット語

* このリリースでは、タイ語テキストの表示と編集はサポートされていますが、単語の区切りはサポートされていません。

現在サポートされていない書記体系を次に示します。

  • クメール語

  • 韓国語の古ハングル

  • ミャンマー

  • シンハラ語

すべての書記体系エンジンで OpenType フォントがサポートされています。 OpenType フォントには OpenType レイアウト テーブルを含めることができるため、フォント作成者は、各国対応が強化された高品質なタイポグラフィ フォントをデザインすることができます。 OpenType フォント レイアウト テーブルには、グリフ代替、グリフの配置、両端揃え、およびベースラインの配置に関する情報が含まれています。これにより、テキスト処理アプリケーションによるテキスト レイアウトが強化されます。

OpenType フォントでは、Unicode エンコードを使用して大きなグリフ セットを処理することができます。 こうしたエンコードにより、グリフの文字体裁のバリエーションだけでなく、各国対応の幅も広がります。

WPF のテキスト レンダリングには、解像度に依存しないレンダリングをサポートする Microsoft ClearType サブピクセル テクノロジが利用されています。 これにより読みやすさが大幅に向上し、すべての書記体系で高品質な雑誌スタイルのドキュメントをサポートできるようになります。

各国対応レイアウト

WPF には、横型、縦型、および双方向のレイアウトをサポートするための非常に便利な方法が用意されています。 プレゼンテーション フレームワークで、FlowDirection プロパティを使用してレイアウトを定義できます。 フロー方向のパターンは次のとおりです。

  • LeftToRight : ラテン言語や東アジア言語などの横型レイアウト。

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

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

世界各国で使用されるアプリケーションを作成する際には、アプリケーションがローカライズ可能でなければならないということを念頭に置く必要があります。 以下のトピックでは、その際に考慮する必要がある点について説明します。

複数言語ユーザー インターフェイス

Microsoft では、MUI (Multilingual User Interface) によって言語間での UIs の切り替えをサポートしています。 WPF アプリケーションは、アセンブリ モデルを使用して MUI をサポートします。 1 つのアプリケーションに、言語に依存しないアセンブリと、言語に依存するサテライト リソース アセンブリが含まれます。 エントリ ポイントはメイン アセンブリのマネージ .EXE です。 WPF リソース ローダーは、Framework のリソース マネージャーを利用して、リソースのルックアップとフォールバックをサポートします。 複数の言語サテライト アセンブリが同じメイン アセンブリで動作します。 読み込まれるリソース アセンブリは、現在のスレッドの CurrentUICulture によって決まります。

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

WPF アプリケーションでは、XAML を使用して UI を定義します。 XAML では、一連のプロパティとロジックを持つオブジェクトの階層を指定することができます。 XAML は主に WPF アプリケーションの開発に使用されますが、任意のcommon language runtime (CLR) オブジェクトの階層を指定することもできます。 ほとんどの開発者は、XAML を使用してアプリケーションの UI を指定し、C# などのプログラミング言語を使用してユーザー操作に応答します。

リソースの観点から見た場合、言語に依存しない UI を記述するために作成された XAML ファイルはリソース要素であるため、各国の言語をサポートするためには、最終的にローカライズ可能な形式で配布する必要があります。 XAML はイベントを処理できないため、多くの XAML アプリケーションにはそのためのコードが含まれています。 詳細については、「XAML の概要 (WPF)」を参照してください。 XAML ファイルが XAML の BAML 形式にトークン化されると、コードが取り除かれて別のバイナリにコンパイルされます。XAML の BAML 形式のファイル、イメージ、およびその他の種類のマネージ リソース オブジェクトは、他の言語にローカライズできるようにサテライト リソース アセンブリに埋め込まれるか、ローカリゼーションが不要な場合にはメイン アセンブリに埋め込まれます。

メモメモ

WPF アプリケーションは、文字列テーブルやイメージなどを含むすべての Framework CLR リソースをサポートしています。

ローカライズ可能なアプリケーションのビルド

ローカリゼーションとは、UI を異なるカルチャに適合させることを意味します。 WPF アプリケーションをローカライズ可能にするには、ローカライズ可能なすべてのリソースをリソース アセンブリに組み込む必要があります。 リソース アセンブリはさまざまな言語にローカライズされ、分離コードがリソース管理 API を使用して読み込みます。 WPF アプリケーションに必要なファイルの 1 つはプロジェクト ファイル (.proj) です。 プロジェクト ファイルには、アプリケーションで使用するすべてのリソースを含める必要があります。 .csproj ファイルの場合の例を次に示します。

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

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

        Private Sub OnClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
          Dim rm As New ResourceManager("stringtable", System.Reflection.Assembly.GetExecutingAssembly())
          Text1.Text = rm.GetString("Message")
        End Sub
void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

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

ClickOnce は Windows フォームの新しい配置テクノロジで、Microsoft Visual Studio 2005 で利用できます。 これにより、アプリケーションのインストールや Web アプリケーションのアップグレードを行うことができます。 ClickOnce で配置されたアプリケーションをローカライズした場合、ローカライズしたカルチャ以外では表示できません。 たとえば、配置されたアプリケーションを日本語にローカライズすると、日本語の Microsoft Windows でしか表示できなくなります (英語の Windows では表示できません)。 日本のユーザーが英語版の Windows を実行するケースは珍しくないため、これは問題になります。

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

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

参照

概念

WPF のグローバリゼーションおよびローカリゼーションの概要