次の方法で共有


WPF のグローバリゼーションとローカリゼーションの概要

製品の可用性を 1 つの言語のみに制限すると、潜在的な顧客ベースは、世界の 75 億人の人口の一部に制限されます。 アプリケーションが世界中の対象ユーザーに到達するようにしたい場合、製品のコスト効率の高いローカライズは、より多くの顧客にリーチするための最良かつ最も経済的な方法の 1 つです。

この概要では、Windows Presentation Foundation (WPF) でのグローバリゼーションとローカライズについて説明します。 グローバリゼーションは、複数の場所で実行されるアプリケーションの設計と開発です。 たとえば、グローバリゼーションでは、異なるカルチャのユーザーのローカライズされたユーザー インターフェイスと地域データがサポートされます。 WPF には、自動レイアウト、サテライト アセンブリ、ローカライズされた属性やコメントなど、グローバル化されたデザイン機能が用意されています。

ローカリゼーションは、アプリケーションがサポートする特定のカルチャのローカライズされたバージョンへのアプリケーション リソースの変換です。 WPF でローカライズする場合は、 System.Windows.Markup.Localizer 名前空間の API を使用します。 これらの API は 、LocBaml ツールのサンプル コマンド ライン ツールの機能を提供します。 LocBaml をビルドして使用する方法については、「アプリケーションの ローカライズ」を参照してください。

警告

LocBaml ツールは.NET Framework プロジェクト用の WPF でのみ機能し、.NET 用の WPF では機能しません。

WPF でのグローバリゼーションとローカライズのベスト プラクティス

WPF に組み込まれているグローバリゼーションとローカリゼーション機能を最大限に活用するには、このセクションで提供する UI 設計とローカライズ関連のヒントに従います。

WPF UI デザインのベスト プラクティス

WPF ベースの UI を設計するときは、次のベスト プラクティスを実装することを検討してください。

  • XAML で UI を記述する。コードで UI を作成することは避けてください。 XAML を使用して UI を作成する場合は、組み込みのローカライズ API を使用して UI を公開します。

  • 絶対位置と固定サイズを使用してコンテンツをレイアウトしないようにします。代わりに、相対サイズ設定または自動サイズ設定を使用してください。

    • SizeToContentを使用し、幅と高さをAutoに設定したままにします。

    • Canvasを使用して UI をレイアウトしないでください。

    • Gridとそのサイズ共有機能を使用します。

  • ローカライズされたテキストは多くの場合、より多くの領域を必要とするため、余白に余分なスペースを指定します。 余分なスペースを使用すると、文字がオーバーハングする可能性があります。

  • クリッピングを回避するには、TextWrappingTextBlockを有効にします。

  • xml:lang属性を設定します。 この属性は、特定の要素とその子要素のカルチャを記述します。 このプロパティの値は、WPF のいくつかの機能の動作を変更します。 たとえば、ハイフネーション、スペル チェック、番号の置換、複雑なスクリプトの整形、フォント フォールバックの動作を変更します。 XAML での xml:lang 処理の設定の詳細については、「WPF のグローバリゼーション」を参照してください。

  • カスタマイズされた複合フォントを作成して、さまざまな言語で使用されるフォントをより適切に制御できます。 既定では、WPF は Windows\Fonts ディレクトリで GlobalUserInterface.composite フォントを使用します。

  • 右から左の形式でテキストを表示するカルチャにローカライズできるナビゲーション アプリケーションを作成する場合は、ページがFlowDirectionからFlowDirectionを継承しないように、すべてのページのNavigationWindowを明示的に設定します。

  • ブラウザーの外部でホストされるスタンドアロン ナビゲーション アプリケーションを作成する場合は、最初のアプリケーションの StartupUri をページではなく NavigationWindow に設定します (たとえば、 <Application StartupUri="NavigationWindow.xaml">)。 この設計により、ウィンドウとナビゲーション バーの FlowDirection を変更できます。 詳細と例については、「 グローバリゼーション ホームページのサンプル」を参照してください。

WPF ローカライズのベスト プラクティス

WPF ベースのアプリケーションをローカライズする場合は、次のベスト プラクティスを実装することを検討してください。

  • ローカライズ コメントを使用して、ローカライザーに追加のコンテキストを提供します。

  • ローカライズ属性を使用して、要素の Uid プロパティを選択的に省略するのではなく、ローカライズを制御します。 詳細については、「 ローカリゼーション属性とコメント 」を参照してください。

  • msbuild -t:updateuid-t:checkuidを使用して、XAML にプロパティUid追加して確認します。 Uidプロパティを使用して、開発とローカライズの間の変更を追跡します。 Uid プロパティは、新しい開発変更をローカライズするのに役立ちます。 ui に Uid プロパティを手動で追加する場合、通常、タスクは面倒で精度が低くなります。

    • ローカライズを開始した後 Uid プロパティを編集または変更しないでください。

    • 重複する Uid プロパティは使用しないでください (copy-and-paste コマンドを使用する場合は、このヒントを覚えておいてください)。

    • フォールバックの適切な言語 (たとえば、UltimateResourceFallback) を指定するには、AssemblyInfo.* の[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]の場所を設定します。

      プロジェクト ファイル内の <UICulture> タグを省略してメイン アセンブリにソース言語を含める場合は、サテライトの代わりに UltimateResourceFallback の場所をメイン アセンブリとして設定します (たとえば、 [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)])。

WPF アプリケーションをローカライズする

WPF アプリケーションをローカライズする場合は、いくつかのオプションがあります。 たとえば、アプリケーション内のローカライズ可能なリソースを XML ファイルにバインドしたり、ローカライズ可能なテキストを resx テーブルに格納したり、ローカライザーで XAML ファイルを使用したりすることができます。 このセクションでは、XAML の BAML 形式を使用するローカライズ ワークフローについて説明します。これには、いくつかの利点があります。

  • ビルド後にローカライズできます。

  • 以前のバージョンの BAML 形式の XAML からのローカライズを使用して、XAML の BAML 形式の新しいバージョンに更新して、開発と同時にローカライズすることができます。

  • 元のソース要素とセマンティクスはコンパイル時に検証できます。これは、XAML の BAML 形式が XAML のコンパイル済み形式であるためです。

ローカライズ ビルド プロセス

WPF アプリケーションを開発する場合、ローカライズのビルド プロセスは次のようになります。

  • 開発者は WPF アプリケーションを作成してグローバル化します。 開発者がプロジェクト ファイルで <UICulture>en-US</UICulture> 設定して、アプリケーションをコンパイルすると、言語に依存しないメイン アセンブリが生成されるようにします。 このアセンブリには、ローカライズ可能なすべてのリソースを含むサテライト .resources.dll ファイルがあります。 必要に応じて、ローカライズ API でメイン アセンブリからの抽出がサポートされるため、ソース言語をメイン アセンブリに保持できます。

  • ファイルがビルドにコンパイルされると、XAML は XAML の BAML 形式に変換されます。 文化的に中立な MyDialog.exe と、文化的に依存する (英語) MyDialog.resources.dll ファイルが英語を話すお客様にリリースされます。

ローカライズ ワークフロー

ローカライズ プロセスは、ローカライズされていない MyDialog.resources.dll ファイルがビルドされた後に開始されます。 元の XAML の UI 要素とプロパティは、の API を使用して、XAML の BAML 形式からキーと値のペアに抽出されます。 ローカライザーは、キーと値のペアを使用してアプリケーションをローカライズします。 ローカライズが完了した後、新しい値から新しい .resource.dll を生成できます。

キーと値のペアのキーは、開発者が元の XAML に配置する x:Uid 値です。 これらの x:Uid 値を使用すると、API はローカライズ中に開発者とローカライザーの間で発生した変更を追跡およびマージできます。 たとえば、ローカライザーのローカライズが開始された後に開発者が UI を変更した場合、最小限の翻訳作業が失われるように、開発の変更を既に完了したローカライズ作業とマージできます。

次の図は、XAML の BAML 形式に基づく一般的なローカライズ ワークフローを示しています。 この図では、開発者が英語でアプリケーションを記述することを前提としています。 開発者は WPF アプリケーションを作成してグローバル化します。 ビルド時に言語に依存しないメイン アセンブリが、ローカライズ可能なすべてのリソースを含むサテライト .resources.dll で生成されるように、開発者が <UICulture>en-US</UICulture> プロジェクト ファイルで設定します。 または、WPF ローカライズ API がメイン アセンブリからの抽出をサポートしているため、ソース言語をメイン アセンブリに保持することもできます。 ビルド プロセスの後、XAML は BAML にコンパイルされます。 文化的に中立的な MyDialog.exe.resources.dll は、英語を話す顧客に出荷されます。

ローカライズ ワークフローを示す図。

未割り当てワークフローを示す図。

WPF ローカライズの例

このセクションには、WPF アプリケーションをビルドおよびローカライズする方法を理解するのに役立つローカライズされたアプリケーションの例が含まれています。

実行ダイアログボックスの例

次の図は、[ 実行 ] ダイアログ ボックスのサンプルの出力を示しています。

英語:

[英語の実行] ダイアログ ボックスを示すスクリーンショット。

ドイツ語:

[ドイツ語の実行] ダイアログ ボックスを示すスクリーンショット。

グローバル実行ダイアログボックスのデザイン

この例では、WPF と XAML を使用して [実行 ] ダイアログ ボックスを生成します。 このダイアログ ボックスは、Microsoft Windows の [スタート] メニューから使用できる [ 実行 ] ダイアログ ボックスと同じです。

グローバル ダイアログ ボックスを作成するためのいくつかのハイライトは次のとおりです。

自動レイアウト

Window1.xaml の場合:

<Window SizeToContent="WidthAndHeight">

前の Window プロパティは、コンテンツのサイズに応じてウィンドウのサイズを自動的に変更します。 このプロパティは、ローカライズ後にサイズが大きくなるコンテンツをウィンドウが切り捨てないようにします。また、ローカライズ後にコンテンツのサイズが小さくなると、不要な領域も削除されます。

<Grid x:Uid="Grid_1">

Uid プロパティは、WPF ローカライズ API が正しく機能するために必要です。

ユーザー インターフェイス (UI) の開発とローカライズの間の変更を追跡するために、WPF ローカライズ API によって使用されます。 Uid プロパティを使用すると、新しいバージョンの UI を以前のローカライズの UI とマージできます。 コマンド シェルでUidを実行して、msbuild -t:updateuid RunDialog.csproj プロパティを追加します。 手動でプロパティを追加するのは通常、時間がかかり、精度が低いため、 Uid プロパティを追加する場合に推奨される方法です。 Uidを実行すると、msbuild -t:checkuid RunDialog.csprojプロパティが正しく設定されていることを確認できます。

UI は、 コントロールを使用して構成されます。これは、WPF の自動レイアウトを利用するための便利なコントロールです。 ダイアログ ボックスは 3 つの行と 5 つの列に分割されることに注意してください。 行と列の定義の 1 つに固定サイズがありません。そのため、各セルに配置される UI 要素は、ローカライズ時のサイズの増減に適応できます。

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Open: ラベルとComboBoxが配置されている最初の 2 つの列では、UI の全幅の 10% が使用されます。

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

この例では、 Gridの共有サイズ設定機能を使用しています。 最後の 3 つの列は、同じ SharedSizeGroupに配置することでこれを利用します。 プロパティの名前から予想されるように、これにより、列は同じサイズを共有できます。 そのため、"参照..." がより長い文字列の "Durchsuchen..." にローカライズされると、すべてのボタンは [OK] ボタンのように小さいままでなく、一様に幅が広がるため、「Durchsuchen...」ボタンが他に比べて不自然に大きくならないようになります。

xml:lang

xml:lang="en-US"

XAML の xml:lang Handling が UI のルート要素に配置されていることに注目してください。 このプロパティは、特定の要素とその子のカルチャを記述します。 この値は WPF のいくつかの機能で使用され、ローカライズ時に適切に変更する必要があります。 この値は、ハイフネーションとスペル チェックの単語に使用する言語辞書を変更します。 また、数字の表示や、フォント フォールバック システムが使用するフォントの選択方法にも影響します。 最後に、このプロパティは、数値の表示方法と、複雑なスクリプトで記述されたテキストの整形方法に影響します。 既定値は "en-US" です。

サテライト リソース アセンブリの構築

.csproj の場合:

.csproj ファイルを編集し、無条件の<PropertyGroup>に次のタグを追加します。

<UICulture>en-US</UICulture>

UICulture値が追加されていることに注意してください。 en-USなどの有効な CultureInfo 値に設定すると、プロジェクトをビルドすると、ローカライズ可能なすべてのリソースを含むサテライト アセンブリが生成されます。

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

RunIcon.JPGは、すべてのカルチャで同じように表示されるため、ローカライズする必要はありません。 Localizablefalse に設定されているため、サテライト アセンブリの代わりに言語に依存しないメイン アセンブリに残ります。 すべての非コンパイル可能なリソースの既定値は、Localizableに設定true

[実行] ダイアログのローカライズ

解析

アプリケーションをビルドした後、ローカライズの最初の手順は、サテライト アセンブリからローカライズ可能なリソースを解析することです。 このトピックでは、LocBaml ツール サンプルにあるサンプルの LocBaml ツールを使用します。 LocBaml は、ローカライズ プロセスに適合するローカライズ ツールの構築を開始するのに役立つサンプル ツールに過ぎません。 LocBaml を使用して解析するには、次のコマンドを実行します。LocBaml /parse RunDialog.resources.dll /out: を使って "RunDialog.resources.dll.CSV" ファイルを生成します。

警告

LocBaml ツールは.NET Framework プロジェクト用の WPF でのみ機能し、.NET 用の WPF では機能しません。

ローカライズする

Unicode をサポートする任意の CSV エディターを使用して、このファイルを編集します。 ローカライズ カテゴリが "None" のすべてのエントリをフィルターで除外します。 次のエントリが表示されます。

リソース キー ローカライズ カテゴリ 価値
Button_1:System.Windows.Controls.Button.$Content ボタン [OK]
Button_2:System.Windows.Controls.Button.$Content ボタン キャンセル
Button_3:System.Windows.Controls.Button.$Content ボタン ブラウズ。。。
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$Content テキスト プログラム、フォルダー、ドキュメント、またはインターネット リソースの名前を入力すると、Windows によって開かれます。
TextBlock_2:System.Windows.Controls.TextBlock.$Content テキスト 開ける:
Window_1:System.Windows.Window.Title タイトル 走れ

アプリケーションをドイツ語にローカライズするには、次の翻訳が必要です。

リソース キー ローカライズ カテゴリ 価値
Button_1:System.Windows.Controls.Button.$Content ボタン [OK]
Button_2:System.Windows.Controls.Button.$Content ボタン Abbrechen
Button_3:System.Windows.Controls.Button.$Content ボタン Durchsuchen...
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$Content テキスト Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource a.
TextBlock_2:System.Windows.Controls.TextBlock.$Content テキスト 開く
Window_1:System.Windows.Window.Title タイトル 走れ

の生成

ローカライズの最後の手順では、新しくローカライズされたサテライト アセンブリを作成します。 これを行うには、次の LocBaml コマンドを使用します。

/generate RunDialog.resources.dll /trans:RunDialog.resources.dllを LocBaml.exe します。CSV /out: . /cul:de-DE

ドイツ語の Windows では、この resources.dll がメイン アセンブリの横にある de-DE フォルダーに配置されている場合、このリソースは、en-US フォルダー内のフォルダーではなく自動的に読み込まれます。 これをテストするドイツ語版の Windows がない場合は、使用している Windows のカルチャ (たとえば、 en-US) にカルチャを設定し、元のリソース DLL を置き換えます。

サテライト リソースの読み込み

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
コード 元の英語 BAML ローカライズされた BAML
文化的に中立的なリソース 英語のその他のリソース ドイツ語にローカライズされたその他のリソース

.NET では、アプリケーションの Thread.CurrentUICultureに基づいて、読み込むサテライト リソース アセンブリが自動的に選択されます。 既定では、Windows OS のカルチャが使用されます。 ドイツ語の Windows を使用している場合は、 de-DE\MyDialog.resources.dll ファイルが読み込まれます。 英語の Windows を使用している場合は、 en-US\MyDialog.resources.dll ファイルが読み込まれます。 プロジェクトの NeutralResourcesLanguage ファイルで属性を指定することで、アプリケーションの最終的なフォールバック リソースを設定できます。 たとえば、次のように指定します。

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

en-US\MyDialog.resources.dll ファイルは 、次のいずれのファイルも使用できない場合は、ドイツ語の Windows で使用されます: de-DE\MyDialog.resources.dll または de\MyDialog.resources.dll

Microsoft サウジアラビア ホームページ

次の図は、英語とアラビア語のホームページを示しています。 これらのグラフィックスを生成する完全なサンプルについては、「 グローバリゼーション ホームページのサンプル」を参照してください。

英語:

英語のホーム ページを示すスクリーンショット。

アラビア語:

アラビア語のホーム ページを示すスクリーンショット。

グローバル Microsoft ホーム ページの設計

この Microsoft サウジアラビア Web サイトのモックアップは、RightToLeft 言語用に提供されるグローバリゼーション機能を示しています。 ヘブライ語やアラビア語などの言語には右から左への読み取り順序があるため、UI のレイアウトは、多くの場合、英語などの左から右の言語とは全く異なる方法でレイアウトする必要があります。 左から右の言語から右から左へ、またはその逆にローカライズすることは非常に困難な場合があります。 WPF は、このようなローカライズをはるかに簡単にするように設計されています。

フローディレクション

Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

FlowDirectionPage プロパティに注目してください。 このプロパティを RightToLeft に変更すると、FlowDirectionとその子要素のPageが変更され、アラビア語のユーザーが期待するように、この UI のレイアウトが右から左に反転されます。 任意の要素に明示的な FlowDirection を指定することで、継承動作をオーバーライドできます。 FlowDirection プロパティは、任意のFrameworkElementまたはドキュメント関連の要素で使用でき、LeftToRightの暗黙的な値を持っています。

ルート FlowDirection が変更されると、背景のグラデーション ブラシも正しく反転することを確認します。

FlowDirection="LeftToRight"

左から右へのグラデーション フローを示すスクリーンショット。

FlowDirection="RightToLeft"

右から左へのグラデーション フローを示すスクリーンショット。

パネルとコントロールに固定寸法を使用しないようにする

Homepage.xaml を見てみましょう。上部 DockPanelの UI 全体に対して指定された固定の幅と高さを除いて、他の固定ディメンションがないことに注意してください。 ローカライズされたテキストがソーステキストよりも長くなる可能性があるため、クリッピングを避けるために固定寸法を使用しないようにします。 WPF のパネルとコントロールは、含まれているコンテンツに基づいて自動的にサイズ変更されます。 ほとんどのコントロールには、より多くのコントロール (MinWidth="20" など) に設定できる最小および最大のディメンションもあります。 Gridでは、"*" (たとえば、Width="0.25*") を使用して相対的な幅と高さを設定したり、セル サイズ共有機能を使用したりすることもできます。

ローカリゼーション コメント

コンテンツがあいまいで翻訳が難しい場合が多い場合があります。 開発者またはデザイナーには、ローカライズ コメントを通じてローカライズ担当者に追加のコンテキストとコメントを提供する機能があります。 たとえば、以下の Localization.Comments では、文字 '|' の使用法が明確になります。

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

このコメントはTextBlock_1のコンテンツに関連付けられます。LocBaml ツールの場合 ( アプリケーションのローカライズを参照)、出力 .csv ファイルの TextBlock_1 行の 6 列目に表示されます。

リソース キー カテゴリ 読みやすい 変更可能 コメント 価値
TextBlock_1:System.Windows.Controls.TextBlock.$Content テキスト 真実 真実 この文字は装飾ルールとして使用されます。 |

コメントは、次の構文を使用して、任意の要素のコンテンツまたはプロパティに配置できます。

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

ローカリゼーション属性

多くの場合、開発者またはローカリゼーション マネージャーは、ローカライザーが読み取りおよび変更できる内容を制御する必要があります。 たとえば、ローカライズ担当者に会社の名前や法的な言葉を翻訳させたくない場合があります。 WPF には、要素のコンテンツまたはプロパティの読みやすさ、変更可能性、およびカテゴリを設定できる属性が用意されています。この属性を使用すると、ローカライズ ツールを使用して要素をロック、非表示、または並べ替えることができます。 詳細については、Attributesを参照してください。 このサンプルの目的上、LocBaml ツールは、これらの属性の値を出力するだけです。 WPF コントロールはすべて、これらの属性の既定値を持ちますが、オーバーライドできます。 たとえば、次の例では、 TextBlock_1 の既定のローカライズ属性をオーバーライドし、コンテンツを読み取り可能に設定しますが、ローカライザーでは変更できません。

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

WPF には、読みやすさと変更可能性の属性に加えて、ローカライズ担当者により多くのコンテキストを提供するために使用できる一般的な UI カテゴリ (LocalizationCategory) の列挙が用意されています。 プラットフォーム コントロールの WPF の既定のカテゴリは、XAML でもオーバーライドできます。

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

WPF が提供する既定のローカライズ属性は、コードを使用してオーバーライドすることもできるため、カスタム コントロールの適切な既定値を正しく設定できます。 例えば次が挙げられます。

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
    // ...
}

XAML で設定されたインスタンスごとの属性は、カスタム コントロールのコードで設定された値よりも優先されます。 属性とコメントの詳細については、「 ローカリゼーション属性とコメント」を参照してください。

フォント フォールバックと複合フォント

指定したコードポイント範囲をサポートしていないフォントを指定すると、WPF は、Windows\Fonts ディレクトリにあるグローバル ユーザー インターフェイス.compositefont を使用して行うフォントに自動的にフォールバックします。 複合フォントは他のフォントと同様に機能し、要素の FontFamily (たとえば、 FontFamily="Global User Interface") を設定することで明示的に使用できます。 独自の複合フォントを作成し、特定のコードポイント範囲と言語に使用するフォントを指定することで、独自のフォント フォールバック設定を指定できます。

複合フォントの詳細については、「 FontFamily」を参照してください。

Microsoft ホームページのローカライズ

実行ダイアログの例と同じ手順に従って、このアプリケーションをローカライズできます。 グロー バリゼーション ホームページ サンプルでは、アラビア語用のローカライズされた .csv ファイルを使用できます。