Wpf-localization
提供:Dev Guides
WPF-ローカリゼーション
ローカリゼーションとは、アプリケーションがサポートする特定のカルチャに合わせて、アプリケーションリソースをローカライズバージョンに翻訳することです。
アプリケーションを開発し、アプリケーションを1つの言語のみで使用できる場合、顧客の数とビジネスの規模を制限しています。 顧客ベースを増やしてビジネスを拡大したい場合は、製品が利用可能であり、世界中のユーザーにリーチできる必要があります。 製品の費用対効果の高い*ローカライズ*は、より多くの顧客にアプローチするための最良かつ最も経済的な方法の1つです。
WPFでは、ローカライズ可能な最も簡単なソリューションである resx ファイルを使用して、ローカライズ可能なアプリケーションを非常に簡単に作成できます。 それがどのように機能するかを理解するために簡単な例を見てみましょう-
- WPFLocalization という名前の新しいWPFプロジェクトを作成します。
- ソリューションエクスプローラーで、Propertiesフォルダーの下にResources.resxファイルが表示されます。
- XAMLファイルでアクセスできるように、アクセス修飾子を内部からパブリックに変更します。
- 次に、アプリケーションで使用する次の文字列の名前と値を追加します。
- Resources.en.resxおよびResources.ru-RU.resxという名前のResources.resxファイルの2つのコピーを作成します。 これらは、言語および国/地域名に固有の命名規則であり、各国語サポート(NLS)APIリファレンス(https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx)ページで見つけることができます。
- 以下に示すように、Resources.ru-RU.resxの値をロシア語に変更します。
- デザインウィンドウに移動して、3つのテキストボックス、3つのラベル、3つのボタンをドラッグします。
- XAMLファイルで、まずリソースをローカライズするために名前空間宣言を追加します_xmlns:p = "clr-namespace:WPFLocalization.Properties" _ 以下に示すように、すべてのコントロールのプロパティを設定します。 この例では、XAMLファイルのウィンドウのラベル、ボタン、タイトルのコンテンツにハードコードされた文字列を使用しません。 .resxファイルで定義されている文字列を使用します。 たとえば、ウィンドウのタイトルには、次のように* .resxファイルで定義されているタイトル文字列を使用します_“ Title = "\ {x:Static p:Resources.Title}"” _
- コントロールが作成され、さまざまなプロパティで初期化されるXAMLファイルを次に示します。
<Window x:Class = "WPFLocalization.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:WPFLocalization"
xmlns:p = "clr-namespace:WPFLocalization.Properties"
Title = "{x:Static p:Resources.Title}" Height = "350" Width = "604">
<Grid>
<TextBox x:Name = "textBox" HorizontalAlignment = "Left" Height = "23"
Margin = "128,45,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/>
<Label x:Name = "label" Content = "{x:Static p:Resources.Name}"
HorizontalAlignment = "Left" Margin = "52,45,0,0" VerticalAlignment = "Top" Width = "86"/>
<TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "23"
Margin = "128,102,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/>
<Label x:Name = "label1" Content = "{x:Static p:Resources.Address}"
HorizontalAlignment = "Left" Margin = "52,102,0,0" VerticalAlignment = "Top" Width = "86"/>
<TextBox x:Name = "textBox2" HorizontalAlignment = "Left" Height = "23"
Margin = "128,157,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "80"/>
<Label x:Name = "label2" Content = "{x:Static p:Resources.Age}"
HorizontalAlignment = "Left" Margin = "52,157,0,0" VerticalAlignment = "Top" Width = "86"/>
<Button x:Name = "button" Content = "{x:Static p:Resources.OK_Button}"
HorizontalAlignment = "Left" Margin = "163,241,0,0" VerticalAlignment = "Top" Width = "75"/>
<Button x:Name = "button1" Content = "{x:Static p:Resources.Cancel_Button}"
HorizontalAlignment = "Left" Margin = "282,241,0,0" VerticalAlignment = "Top" Width = "75"/>
<Button x:Name = "button2" Content = "{x:Static p:Resources.Help_Button}"
HorizontalAlignment = "Left" Margin = "392,241,0,0" VerticalAlignment = "Top" Width = "75"/>
</Grid>
</Window>
- 上記のコードがコンパイルされ実行されると、異なるコントロールを含む次のウィンドウが表示されます。
- デフォルトでは、プログラムはデフォルトのResources.resxを使用します。 Resources.ru-RU.resxファイルで定義されているロシア語のテキストを表示する場合は、以下に示すように、プログラムがApp.xamlファイルで起動するときにカルチャを明示的に設定する必要があります。
using System.Windows;
namespace WPFLocalization {
///<summary>
///Interaction logic for App.xaml
///</summary>
public partial class App : Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
}
}
}
アプリケーションを実行すると、すべてのテキストがロシア語で表示されます。
上記のコードを実行し、他のカルチャ用のresxファイルも作成することをお勧めします。