WPF ローカリゼーションの概要
WPF ローカリゼーションとは、アプリケーションのリソースを特定のカルチャ向けに変換し、ローカライズされたバージョンを作成することです。適切な情報を得るために、データを適切な言語に変換する必要があります。
WPF ローカリゼーションの目的は何ですか?
- アプリケーションを開発し、そのアプリケーションが1つの言語のみで利用可能な場合、多くのユーザーがそのアプリケーションを使用できないため、顧客ベースとビジネス規模が制限されます。
- 顧客ベースとビジネスを拡大したい場合、製品が利用可能であり、適切な言語のシンプルな情報を通じてグローバルな視聴者にアクセスできるようにする必要があります。コスト効率の高い製品ローカリゼーションは、より多くの顧客と連絡を取り、アプリケーションに参加してもらうための最良かつ最も経済的な方法の1つです。
- ご存知の通り、この世界には非常に多くの人々と多くの言語が存在します。このような状況において、WPF ローカリゼーションは顕著な影響を与えます。
- 人々は、プロジェクト内の有用な情報と優れた機能が、何の障壁もなく利用できることを望んでいるからです。
- 適切なユーザー言語に関するすべての情報を提供できます。
WPF ローカリゼーションにはどのような種類がありますか?
WPF には2種類の WPF ローカリゼーションがあります。
- 静的 WPF ローカリゼーション
- 動的 WPF ローカリゼーション
静的 WPF ローカリゼーション
- 静的 WPF ローカリゼーションは、静的なデータを別の言語に変換するのに非常に便利です。
- 静的なプロジェクトに有用で、別の言語に翻訳する必要のあるすべての情報として定義できます。多くの人がインターネットを利用して情報を得ているため、これは他国の居住者にとって、情報を簡単に取得できるという点で有用です。
動的 WPF ローカリゼーション
- 動的なデータに対する動的 WPF ローカリゼーションです。
- このタイプのローカリゼーションは、データを動的フォーマットで取得するのに非常に便利です。
- 動的フォーマットでは取得すべき情報が多すぎるため、ユーザーのニーズに応じて別の言語に簡単に翻訳できます。したがって、これらの機能は重要な役割を果たします。
- 動的 WPF ローカリゼーションは、リソースディクショナリファイルを利用してデータを取得し、ある言語から別の言語に翻訳します。
リソースディクショナリファイルの例
コード
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
</ResourceDictionary>
名前空間を追加してリソースディクショナリを使用します。
名前空間
xmlns:sys="clr-namespace:System;assembly=mscorlib"
リソースディクショナリファイルのデータを以下のコードのように追加します。
コード
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<sys:String x:Key="ResourceDictionaryName">Loc-en-US</sys:String>
<sys:String x:Key="WindowTitle">Dynamic Localization in WPF</sys:String>
<sys:String x:Key="FirstNameLabel">First Name</sys:String>
<sys:String x:Key="LastNameLabel">Last Name</sys:String>
</ResourceDictionary>
プロジェクトで WPF ローカリゼーションを使用する方法
ステップ 1
WPF ローカリゼーション用の新しいプロジェクトを作成します。
ステップ 2
次に、最新バージョンの WPF ローカリゼーション拡張パッケージ WPFLocalizeExtension をインストールします。

ステップ 3
リソースファイルを追加します。

インストール後、リソースファイルを追加し(上図参照)、Resources.resx ファイルを開きます。
新しく追加されたリソースファイル:

ステップ 4
アクセス修飾子を public に変更する必要があります。これで、メインページで追加したリソースを使用できます(つまり、リソースファイルのプロパティを右クリックし、カスタムツールを PublicResXFileCodeGenerator に変更します。そうしないと、プログラム実行時にエラーが発生します)。
ステップ 5
resources.resx ファイルでユーザーのデザインを確認できます。
ステップ 6
新しいファイルを作成するには、次の手順に従います。
"プロジェクト名を右クリック → 追加ボタンをクリック → 新しい項目をクリック → Visual C# プロジェクトをクリック → リソースファイルを検索 → ファイル名を定義します。"
注意
ただし、ファイル名は Resources.fr-FR.resx や Resources.gr-GR のように宣言します。
ファイル名: 以下の Resources.resx ファイル

ファイル名: 以下の Resources.fr-FR.resx ファイル

ステップ 7
次に、以下の名前空間を使用して、MainWindow.xaml ファイルにそのファイルを追加します。
例
"xmlns:CC="clr-namespace:WpfApp1Localization.Properties"
ステップ 8
次に、App.xaml.cs ファイルを使用してリソースファイルを呼び出します。つまり、プロジェクトの起動時にローカル言語を読み取り、言語を切り替えます。
コード
namespace WpfApp1Localization {
public partial class App: Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
}
}
}
ステップ 9
プロジェクトのすべてのファイルを保存し、プロジェクトを実行します。
ステップ 10
WPF ローカリゼーションで静的 WPF ローカリゼーションを使用してプロジェクトを出力します。
出力

WPF ローカリゼーションのサンプルプロジェクト
- まず、新しいプロジェクトを作成します。プロジェクト名は WPFLocalizationDemo です。
- 次に、Resources.en.resx と Resources.gr-GR.resx の2つのファイルを作成します。
- 2つのファイルにデータフィールドを追加します。
Resources.en.resx

Resources.gr-Gr.resx

リソースファイル内のテーブルデータの説明
ボタン1 – 送信テキストは送信されます。
ボタン2 – ユーザー登録。
ボタン3 – ログインフォームのデータをキャンセルまたはリセットします。
ラベル1 – ログインフォームのタイトルとプロンプト。
ラベル2 – ユーザー名入力用のラベルプロンプト。
ラベル3 – パスワード入力用のラベルプロンプト。
- 以下の XAML ファイルで、名前空間を追加してリソースファイルを追加します。
コード
<Window
x:Class="WpfApp1Localization.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1Localization"
xmlns:CC="clr-namespace:WpfApp1Localization.Properties"
mc:Ignorable="d"
Title="{x:Static CC:Resources.Log_In}"
Height="450"
Width="800"
Background="Chocolate"
>
<Grid>
<TextBox
HorizontalAlignment="Left"
Height="23"
FontSize="12"
Margin="412,152,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="120"
/>
<TextBox
HorizontalAlignment="Left"
Height="23"
FontSize="12"
Margin="412,233,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="120"
/>
<label
x:Name="label1"
Content="{x:Static CC:Resources.Log_In}"
HorizontalAlignment="Left"
FontSize="18"
Margin="338,72,0,0"
VerticalAlignment="Top"
RenderTransformOrigin="0.526,2.491"
/>
<label
x:Name="label2"
Content="{x:Static CC:Resources.User_Name}"
HorizontalAlignment="Left"
FontSize="12"
Margin="245,152,0,0"
VerticalAlignment="Top"
/>
<label
x:Name="label3"
Content="{x:Static CC:Resources.Password}"
HorizontalAlignment="Left"
FontSize="12"
Margin="245,233,0,0"
VerticalAlignment="Top"
/>
<button
x:Name="button1"
Content="{x:Static CC:Resources.Submit}"
HorizontalAlignment="Left"
Margin="338,330,0,0"
VerticalAlignment="Top"
Width="75"
/>
<button
x:Name="Button2"
Content="{x:Static CC:Resources.Registration}"
HorizontalAlignment="Left"
Margin="245,340,0,0"
VerticalAlignment="Top"
Width="75"
/>
<button
x:Name="Button3"
Content="{x:Static CC:Resources.Cancel}"
HorizontalAlignment="Left"
Margin="532,335,0,0"
VerticalAlignment="Top"
Width="75"
/>
</Grid>
</Window>
app.xaml.cs ファイルを使用してリソースファイルを呼び出します。
コード
namespace WpfApp1Localization {
public partial class App: Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
//System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("en");
}
}
}
プログラムまたはプロジェクトの出力
出力デザインに関しては、以下のようになります。
英語のログインフォーム:

ドイツ語のログインフォーム:

結論
このブログでは、WPF ローカリゼーション、その重要性、種類、そして実際の動作について学びました。これは WPF の概要を理解するための主要な概念の1つであり、アプリケーションが言語の壁の問題を解決するのに役立ちます。
原文リンク:https://www.c-sharpcorner.com/blogs/an-overview-of-wpf-localization-extension-with-an-example