WPF - Localização

Localização é a tradução dos recursos do aplicativo em versões localizadas para as culturas específicas que o aplicativo suporta.

Quando você desenvolve seu aplicativo e ele está disponível em apenas um idioma, você está limitando o número de clientes e o tamanho do seu negócio. Se você deseja aumentar sua base de clientes, o que também aumentará seus negócios, seu produto deve estar disponível e acessível para um público global. Custo-beneficiolocalization do seu produto é uma das maneiras melhores e mais econômicas de alcançar mais clientes.

No WPF, os aplicativos localizáveis ​​são muito fáceis de criar com resxarquivo que é a solução mais simples para localização. Vamos dar um exemplo simples para entender como funciona -

  • Crie um novo projeto WPF com o nome WPFLocalization.

  • Em seu explorador de soluções, você verá o arquivo Resources.resx na pasta Propriedades.

  • Altere o modificador de acesso de interno para público para que possa ser acessado no arquivo XAML.

  • Agora adicione o nome e os valores da seguinte string que usaremos em nosso aplicativo.

  • Faça duas cópias do arquivo Resources.resx com os nomes Resources.en.resx e Resources.ru-RU.resx. Essas são convenções de nomenclatura específicas para o idioma e o nome do país / região e podem ser encontradas em National Language Support (NLS) API Reference (https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx ) página.

  • Altere os valores em Resources.ru-RU.resx para palavras russas, conforme mostrado abaixo.

  • Vamos para a janela de design e arrastar três caixas de texto, três rótulos e três botões.

  • No arquivo XAML, primeiro adicione a declaração de namespace para usar os recursos de localização xmlns: p = "clr-namespace: WPFLocalization.Properties"

  • Defina as propriedades de todos os controles conforme mostrado abaixo. Neste exemplo, não usaremos strings codificadas para o conteúdo de rótulos, botões e Título da janela no arquivo XAML. Estaremos usando as strings que são definidas em arquivos * .resx. Por exemplo, para o Título da janela, usamos a string Título que é definida no arquivo * .resx como este “Título =" {x: Estático p: Recursos.Título} "”

  • Aqui está o arquivo XAML no qual os controles são criados e inicializados com propriedades diferentes.

<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>
  • Quando o código acima for compilado e executado, você verá a seguinte janela que contém diferentes controles.

  • Por padrão, o programa usa o padrão Resources.resx. Se quiser mostrar o texto no idioma russo definido no arquivo Resources.ru-RU.resx, você precisará definir a cultura explicitamente quando o programa iniciar no arquivo App.xaml, conforme mostrado abaixo.

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

Ao executar seu aplicativo, você verá todo o texto no idioma russo.

Recomendamos que você execute o código acima e crie arquivos resx para outras culturas também.