Internacionalização: usando string resources em Universal Apps

Muito comum no desenvolvimento de um aplicativo é a necessidade de expandir o acesso ao app a diversas pessoas do mundo, logo, a obrigatoriedade de suporte a outros idiomas se torna realidade. Esse recurso é conhecido como String Resources. 

Mas como o aplicativo sabe qual idioma usar? Simples, ele vai usar o idioma selecionado no dispositivo pelo usuário. Caso o idioma selecionado não seja suportado pelo aplicativo, o mesmo irá usar o idioma configurado como padrão nas propriedades do projeto.

Para demonstrar, vamos criar um projeto Universal Apps no Visual Studio:

I18N_create_project

Com o projeto criado, precisamos selecionar o idioma padrão para cada plataforma. Clique com o botão direto sobre um projeto e selecione a opção Properties.

Nas propriedades do projeto Selecione a aba Application e clique no botão Assembly Information.

Abrindo Assembly Information do projeto
Abrindo Assembly Information do projeto

Com a janela do Assembly Information aberta, selecione no campo Neutral language o idioma padrão do seu aplicativo. Nesse exemplo iremos usar o Inglês dos Estados Unidos.  Selecione sempre como Neutral Language um idioma suportado pelo App.

Selecionando Neutral Language
Selecionando Neutral Language

Esse processo é necessário no projeto Windows e Windows Phone. O projeto Shared não possui essa opção de idioma, já que o mesmo irá utilizar a seleção da linguagem da plataforma que está executando.

Agora vamos criar nossos arquivos de internacionalização, onde estarão especificados os textos a serem exibidos para o usuário.

No projeto Shared crie uma nova pasta chamada Strings. Para isso, clique com o botão direito sobre o projeto Shared > Add > New Folder.

Agora vamos criar sub pastas para os idiomas que vamos usar, que neste exemplo serão o Inglês (Estados Unidos) e Português (Brasil). Clique com o botão direito sobre a pasta Strings > Add > New Folder, adicione o nome en-US. Repita o processo de criar uma sub pasta dentro da pasta String e crie outra pasta com o nome pt-BR. Para ver todos os idiomas com seus respectivos nomes acesse o link.

Depois desses passos a estrutura de pastas de idiomas do projeto Shared deve estar assim:

Estrutura de pastas
Estrutura de pastas

O próximo passo é criar os arquivos de Resources para cada idioma, para isso clique com o botão direito sobre a pasta en-US > Add > New Item… O Visual Studio apresentará as opções e, dentra elas, selecione Resources.resw.

Criando Resource File
Criando Resource File

Faça o mesmo processo para a pasta pt-BR, mantendo o arquivo com o mesmo nome (Resources.resw).

Abra os arquivos Resources.resw e adicione os seguintes valores:

Arquivo Resource.resw (en-US)
Arquivo Resource.resw (en-US)
Arquivo Resource.resw (pt-BR)
Arquivo Resource.resw (pt-BR)

O arquivo é composto por três colunas, onde Name é a chave usada para identificar a string do recurso. A chave Greeting.Text identifica diretamente um elemento dentro do .XAML, o qual recebera o texto da coluna Value automaticamente na propriedade Text. Na coluna Value fica a string que representa o texto no respectivo idioma do resource. Na última coluna, Comment, é usada para adicionar uma descrição sobre o registro de dentro do arquivo.

Pronto, nossos arquivos de internacionalização já estão prontos. Agora é usá-los para exibir para o usuário as strings correspondentes com o idioma do dispositivo.

Vamos criar dois TextBlocks:

<TextBlock x:Uid="Greeting" TextWrapping="Wrap"/>
<TextBlock x:Name="FarewellTextBlock" TextWrapping="Wrap" Margin="0,22,0,0"/>

Veja que o Uid do primerio TextBlock é o mesmo usado no arquivo de resource, o qual receberá na propriedade Text a string da coluna Value.

No code behind vamos adicionar o texto no outro TextBlock:

var loader = new Windows.ApplicationModel.Resources.ResourceLoader();
this.FarewellTextBlock.Text = loader.GetString("Farewell");

Nota:

  • Caso necessite usar um Name que tenha ponto no nome (Farewell.Title por exemplo) no code behind, é necessário trocar o ponto por barra, nesse caso ficaria:
    loader.GetString("Farewell/Title");
    

Ao instanciarmos o ResourceLoader, ele automaticamente pega o arquivo correspondente do idioma do dispositivo. Após isso, é obter a string passando a chave da coluna Name como parâmetro, nesse exemplo passamos a chave Farewell.

Executando o projeto temos o seguinte resultado para um dispositivo com o idioma Português do brasil:

Dispositivo em Português do Brasil
Dispositivo em Português do Brasil

E por fim, um dispositivo com o Idioma Inglês do Estados Unidos selecionado:

Dispositivo em Inglês dos Estados Unidos
Dispositivo em Inglês dos Estados Unidos

Baixe aqui o código fonte desse post.

Chegamos ao fim do projeto de internacionalização. Continuem nos acompanhando e até a próxima!

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s