Criando uma aplicação multi-idiomas em .NET

Veremos nesse artigo como adequar sistemas .NET aos diferentes idiomas e criar aplicações multi-idiomas, oferendo ao usuário uma experiência sempre adequada à sua realidade e preferência.

Fique por dentro
A questão da localização em aplicações .NET é tudo sobre a representação utilizada dentro do software. A ideia é que o usuário tenha familiaridade com o que está sendo mostrado. No Brasil, não gostaríamos de ter uma data do tipo mm/dd/aaaa, como é comum nos EUA, por exemplo.

É disso e muito mais que o conceito de localização dentro do .NET framework trata: como lidar com a criação de aplicações globais. Ao longo desse artigo veremos em detalhes o namespace System.Globalization, que traz o conceito de Cultures, que irão controlar quase todos os aspectos desse tipo de desenvolvimento.

Hoje em dia, temos exemplos muito claros do que são aplicações globais. As lojas de aplicações como a Windows Store permitem que as aplicações disponibilizadas sejam distribuídas em diferentes países, com diferentes culturas e linguagens. O problema dessa abordagem é que, normalmente, o desenvolvimento é feito tendo em mente uma cultura, que enxerga os diferentes elementos dentro de uma aplicação de uma forma, apenas.

Pensando nisso, temos o conceito de localização em .NET, que permite que a cultura da aplicação seja alterada durante a execução, mudando a forma de enxergar horários, datas, representações monetárias, textos, entre outros, permitindo que o software seja mostrado de uma forma natural para o usuário.

Ao longo desse artigo, vamos entender como o framework opera nesse tipo de cenário. A ideia é que tenhamos a capacidade de criar uma página de configuração em que o usuário irá escolher aquela cultura que mais lhe deixa confortável, o que irá alterar todos os aspectos citados na aplicação.

Outra forma de operação, mais comum ultimamente, é a utilização da cultura do sistema operacional em questão, sem a necessidade da criação de uma página específica para configuração.

A vantagem da primeira abordagem está na liberdade que permite a um usuário do Brasil, por exemplo, utilizar a aplicação em inglês americano, seja para questões de treinamento da língua inglesa ou apenas por gosto pessoal, e por isso lidaremos com ela. Os conceitos, entretanto, são facilmente aplicáveis a outras configurações do gosto do leitor.

Entendendo a Localização em .NET

Cada linguagem falada, em qualquer lugar do mundo, possui suas regras de formatação. Nós, como desenvolvedores, precisamos ser capazes de capturar essas regras e colocá-las para trabalhar a nosso favor dentro do produto de software.

Se tivéssemos que criar um conjunto de regras, iríamos entender o quão complexo isso é. Mas, para nossa sorte, o .NET Framework implementa essas regras e só o que precisamos fazer é utilizá-las. Vamos entender como essas regras são implementam e o que fazer para utilizá-las nessa seção e ao longo do artigo.

O .NET, e muitos outros frameworks e linguagens de programação, costumam utilizar um conceito chamado de culture para a representação da linguagem alvo da aplicação. Esse conceito consiste em um código simples, que contém uma string com dois caracteres para representar a linguagem e dois para o país, separados por uma vírgula ou hífen, como em “pt-BR”, que representa a língua portuguesa falada no Brasil.

É interessante notarmos que essa nomenclatura não diz respeito apenas à linguagem escrita da aplicação, e sim a tudo que envolve a mesma. Campos numéricos, monetários, datas, horários etc. são todos controlados por esse código da cultura.

O .NET, especificamente, traz um conceito conhecido como neutral culture, ou cultura neutra, que é utilizado para formatar a linguagem de uma forma mais genérica, sem especificar o país. Por exemplo, para formatar a aplicação em português, sem especificar o português brasileiro, bastaria utilizarmos a string “pt”.

Outro conceito importante é a cultura invariante (invariant culture), que irá ser importante se formos guardar informações como strings. Esse conceito faz com que a aplicação formate as strings como as escrevemos no código.

Agora que temos uma ideia geral de como é feita a implementação do sistema de localização em .NET, vamos entrar em mais detalhes a respeito de como utilizar essa implementação. O namespace System.Globalization traz uma classe chamada CultureInfo, que irá controlar quase todos os aspectos da cultura da aplicação.

Essa classe é utilizada para alterar a cultura da aplicação entre uma série de opções que podem ser vistas em “NLS API Reference”, na seção Links. Esse link traz informações até o Windows 7, mas os Windows 8 e 8.1 podem utilizar essa referência normalmente.

Ainda é possível a criação de nossas próprias culturas, através da classe CultureAndRegionInfoBuilder, mas dificilmente isso será útil.

Como estamos lidando com culturas, precisamos entender como nossa aplicação irá operá-las internamente. O C# possui um conceito chamado de multithreading (BOX 1), que em termos básicos irá permitir a criação de diversos processos da mesma aplicação no sistema operacional.

Cada aplicação irá possuir ao menos uma thread, e é essa thread que irá controlar a cultura de nossa aplicação. O .NET Framework traz duas diferentes culturas: uma para a aplicação em geral, internamente, e outra para a interface de usuário.

A primeira controla a forma como números, datas, horários etc. são mostrados e a segunda controla a linguagem que a interface de usuário será mostrada para o usuário.

BOX 1. Multithreading

O conceito de multithreading é muito utilizado nas linguagens de alto nível mais avançadas. Trata-se da habilidade de controlar múltiplas execuções do mesmo usuário sem criar várias cópias dos mesmos programas.

Esse tipo de processo pode auxiliar no desenvolvimento de aplicações paralelas, que tendem a funcionar mais rapidamente, ao menos quando bem desenvolvidas. Já o principal ponto negativo dessa abordagem é que as threads podem interferir umas nas outras, especialmente quando ambas acessam a memória constantemente."

[...] continue lendo...

Artigos relacionados