WPF-ローカリゼーション

ローカリゼーションとは、アプリケーションがサポートする特定のカルチャに合わせて、アプリケーションリソースをローカライズされたバージョンに変換することです。

アプリケーションを開発し、アプリケーションが1つの言語でしか利用できない場合、顧客の数とビジネスの規模が制限されます。あなたがあなたのビジネスも増やすであろうあなたの顧客基盤を増やしたいならば、あなたの製品は世界中の聴衆に利用可能で到達可能でなければなりません。費用対効果localization あなたの製品の1つは、より多くの顧客に手を差し伸べるための最良かつ最も経済的な方法の1つです。

WPFでは、ローカライズ可能なアプリケーションは非常に簡単に作成できます。 resxローカリゼーションの最も簡単なソリューションであるファイル。それがどのように機能するかを理解するために簡単な例を見てみましょう-

  • 名前で新しいWPFプロジェクトを作成します WPFLocalization

  • ソリューションエクスプローラーでは、[プロパティ]フォルダーの下にResources.resxファイルが表示されます。

  • アクセス修飾子を内部からパブリックに変更して、XAMLファイルでアクセスできるようにします。

  • 次に、アプリケーションで使用する次の文字列の名前と値を追加します。

  • Resources.en.resxおよびResources.ru-RU.resxという名前のResources.resxファイルの2つのコピーを作成します。これらは、言語および国/地域名に固有の命名規則であり、National Language Support(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ファイルで定義されている文字列を使用します。たとえば、ウィンドウのタイトルには、「Title = "{x:Static p:Resources.Title}"」のように* .resxファイルで定義されているタイトル文字列を使用します

  • これは、コントロールが作成され、さまざまなプロパティで初期化される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ファイルも作成することをお勧めします。