WPF: localización

La localización es la traducción de los recursos de la aplicación a versiones localizadas para las culturas específicas que admite la aplicación.

Cuando desarrolla su aplicación y su aplicación está disponible en un solo idioma, entonces está limitando el número de sus clientes y el tamaño de su negocio. Si desea aumentar su base de clientes, lo que también aumentará su negocio, entonces su producto debe estar disponible y accesible a una audiencia global. Económicolocalization de su producto es una de las mejores y más económicas formas de llegar a más clientes.

En WPF, las aplicaciones localizables son muy fáciles de crear con resxarchivo que es la solución más simple para la localización. Tomemos un ejemplo simple para entender cómo funciona:

  • Cree un nuevo proyecto de WPF con el nombre WPFLocalization.

  • En su explorador de soluciones, verá el archivo Resources.resx en la carpeta Propiedades.

  • Cambie el modificador de acceso de interno a público para que se pueda acceder a él en el archivo XAML.

  • Ahora agregue el nombre y los valores de la siguiente cadena que usaremos en nuestra aplicación.

  • Haga dos copias del archivo Resources.resx con los nombres Resources.en.resx y Resources.ru-RU.resx. Estas son convenciones de nomenclatura específicas para el idioma y el nombre del país / región, y se pueden encontrar en la Referencia de API de National Language Support (NLS) (https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx ) página.

  • Cambie los valores en Resources.ru-RU.resx a palabras rusas, como se muestra a continuación.

  • Vayamos a la ventana de diseño y arrastremos tres cuadros de texto, tres etiquetas y tres botones.

  • En el archivo XAML, primero agregue la declaración del espacio de nombres para usar los recursos de localización xmlns: p = "clr-namespace: WPFLocalization.Properties"

  • Establezca las propiedades de todos los controles como se muestra a continuación. En este ejemplo, no usaremos cadenas codificadas para el contenido de las etiquetas, los botones y el título de la ventana en el archivo XAML. Usaremos las cadenas que están definidas en archivos * .resx. Por ejemplo, para el título de la ventana, usamos la cadena de título que se define en el archivo * .resx como este "Título =" {x: Static p: Resources.Title} ""

  • Aquí está el archivo XAML en el que se crean e inicializan los controles con diferentes propiedades.

<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>
  • Cuando se compila y ejecuta el código anterior, verá la siguiente ventana que contiene diferentes controles.

  • De forma predeterminada, el programa utiliza el Resources.resx predeterminado. Si desea mostrar el texto en idioma ruso que se define en el archivo Resources.ru-RU.resx, deberá establecer la cultura explícitamente cuando el programa se inicie en el archivo App.xaml como se muestra a continuación.

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"); 
      } 
   } 
}

Cuando ejecute su aplicación, verá todo el texto en idioma ruso.

Le recomendamos que ejecute el código anterior y cree archivos resx para otras culturas también.