7 11 2010
Localizando sua Aplicação WPF utilizando Arquivos de Recursos
[Atenção!!! Este artigo tem sua versão em vídeo! Se quiser pular a parte escrita e só assistir o vídeo, dê uma olhada no final do post!]
A possibilidade de localizar aplicações de negócios em múltiplos idiomas é um requisito usual de aplicações no mundo globalizado. No escopo do WPF existem várias maneiras de possibilitar que sua aplicação rode em diferentes idiomas. Uma das maneiras de atingir esse objetivo é utilizarmos arquivos de recursos, que é o que veremos neste artigo. No exemplo abaixo, utilizei o Visual Studio 2010 com .NET Framework 4.0, mas, o mesmo exemplo é válido em qualquer edição do WPF.
Primeiramente, vamos criar um novo projeto Visual C# (ou Visual Basic, como preferir) WPF Application, selecionando essa opção na caixa de diálogo que se abre ao executar File -> New -> Project. Dê o nome de WPFLocalization para essa nova aplicação.
Na nossa nova aplicação, vamos utilizar a MainWindow que já é criada automaticamente para construirmos um layout bem simples para a nossa aplicação que será localizada. A ideia é montarmos uma tela de entrada de dados semelhante à imagem abaixo:
O código XAML correspondente à interface acima é o seguinte:
Feito isso, agora vamos começar a localizar essa nossa aplicação. Como disse no início do artigo, vamos utilizar arquivos de recursos para fazer a localização, então, vamos incluir um Resource File no nosso projeto. Para isso, na janela Solution Explorer, clique com o botão direito no projeto e escolha a opção Add -> New Item. Na caixa de diálogo exibida, escolha a opção Resource File e dê o nome de MainWindowMessages.resx.
Ao fazer isso, um arquivo de recursos é adicionado ao nosso projeto. O próximo passo é incluir as chaves que corresponderão aos textos que são exibidos na nossa aplicação, então, crie os seguintes itens nesse arquivo de recursos:
Agora é hora de alterarmos o nosso XAML para que nossa aplicação busque os textos dos nossos controles no nosso arquivo de recursos. Para isso, o primeiro passo é incluir um XML namespace no nosso XAML que aponte para no namespace da nossa aplicação. Portanto, nas declarações dos XML namespaces (na tag Window do nosso XAML), acrescente a seguinte entrada:
xmlns:local="clr-namespace:WpfLocalization"
Dessa forma, podemos alterar os textos dos nossos labels e botão para que sejam buscados no nosso arquivo de recursos, utilizando a seguinte sintaxe na propriedade Text do nosso TextBlock, por exemplo:
Após alterar o XAML todo, o resultado deverá ser o seguinte:
Com isso, nossa aplicação já estará buscando as descrições do arquivo de recursos. Então, para que ela seja multi-idiomas, basta acrescentar outros arquivos de recursos com o mesmo nome e o código do idioma, como, por exemplo, MainWindowMessages.en-US.resx, com os seguintes itens:
Aproveite e crie também o arquivo MainWindowMessages.pt-BR.resx com o mesmo conteúdo do primeiro arquivo de recursos criado, para caso o idioma padrão do seu sistema operacional não seja o português.
Após isso, ao rodar a sua aplicação novamente, se o seu sistema operacional for em inglês, sua aplicação será exibida em inglês. Já se o seu sistema operacional for em português ou outro idioma, sua aplicação será exibida em português.
Para testarmos melhor as alterações, você pode forçar a cultura da sua aplicação para pt-BR no construtor da sua MainWindow, da seguinte forma:
public MainWindow() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("pt-BR"); InitializeComponent(); }
Ou, caso queira forçar o idioma inglês, você pode alterar o “pt-BR” para “en-US”:
public MainWindow() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("pt-BR"); InitializeComponent(); }
Para tornar sua aplicação localizável em outros idiomas, é só criar outros arquivos de recursos com o mesmo nome, utilizando somente o código do idioma antes da extensão .resx.
É isso aí. Dessa forma a sua aplicação será exibida no idioma correspondente ao idioma do sistema operacional do seu cliente.
Espero que vocês tenham gostado. Deixem suas dúvidas, sugestões, etc. nos comentários desse post.
E abaixo você pode conferir a versão em vídeo deste artigo:
[Observação: para assistir o vídeo em uma qualidade melhor, clique no botão HD do Media Player abaixo]
Este artigo / vídeo foi baseado no exemplo encontrado no site de Windows Client da Microsoft: http://windowsclient.net/learn/video.aspx?v=297139
Espero que tenham gostado! Até a próxima!
André Alves de Lima.
Agrupamentos Simples no Report Viewer do VS 2010 Retrospectiva 2010
[…] ATENÇÃO!!! ESTE BLOG MUDOU DE ENDEREÇO: http://www.andrealveslima.com.br VISITE ESTE MESMO POST NO NOVO ENDEREÇO AQUI […]
Muito bom, para quem não sabia ficou bem claro como fazer aplicações inter-nacionalizadas!!!
Alberto, valeu pelo feedback! Abraço!
André, tentei reproduzir isto em uma aplicação que estava começando, e não funciona. poderia me ajudar?
Claro Christiano! O que exatamente está acontecendo? Você seguiu exatamente os mesmos passos do artigo?
[]’s,
André Alves de Lima.
sim. após usar definir o {x:Static …}, o designer não é capaz de exibir a tela. fiz com apenas um textblock p/ testes. tento executar, e a msg de erro informa não encontrar o recurso.
adicionei um resource file chamado recurso com o único
recurso:
txtInicio | meu texto
este é o erro:
O valor ‘TesteLocalizacao.recurso.txtInicio’ de StaticExtension não pode ser resolvido para uma enumeração, campo estático ou propriedade estática. Erro no objeto ‘txtInicio’ no arquivo de marcação ‘TesteLocalizacao;component/window1.xaml’, linha 7, posição 39.
puxa vida, descobri! é o modificador de acesso do arquivo resource. deve ser público! de qq forma, obrigado!