i18n: Detectando o idioma do usuário

· 3 minutos de leitura
i18n: Detectando o idioma do usuário

Internacionalizar uma aplicação nem sempre é algo fácil, ainda mais no mundo Web. Mas nesse mundo o seu melhor amigo é o header Accept-Language. No lado do servidor, você provavelmente se limitará a duas formas de descobrir o idioma do usuário, uma pelo header Accept-Language e a outra pelo endereço IP.

Header Accept-Language

O header Accept-Language é a melhor forma de detecção do idioma do usuário. Isto porque ele define uma faixa de idiomas e atribui um peso de importância para cada. No exemplo:

Accept-Language:en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4

Podemos interpretar a sentença acima como: Eu prefiro Inglês Americano (en-US), mas também aceito outros tipos de Inglês (en;q=0.8), e Português do Brasil (pt-BR;q=0.6) ou ainda outro tipo de Português (pt;q=0.4).

O parâmetro q indica o peso do idioma, quanto maior o númeto, maior a imortância. No caso do en-US não existe o q, isto indica que ele possui peso 1. O mais valor mais alto.

O header Accept-Language não é obrigatório, sendo assim podem ocorrer casos onde será necessário descobrir o idioma de outra maneira. Além disso, o header é passível de alteração pelo usuário, existem alguns plugins para o Chrome por exemplo.

Endereço IP

Descobrir pelo endereço IP também tem seus problemas. Os mais comuns são, o usuário está no Brasil, mas ele passa por um proxy nos Estados Unidos, logo o seu IP será escondido atrás do proxy na maioria dos casos, inviabilizando a detecção correta. Outro problema é que nem todo mundo que vive no Canadá fala Inglês, por exemplo, uma parte da população fala Francês.

Atravéz do IP conseguimos saber o país que o usuário está, e em muitos casos até a cidade. Isto ajuda na escolha do idioma. A melhor forma para descobrir esses dados através do IP é a base MaxMind GeoIP 2. Além disso, existe integração dela para praticamente todas as linguagens conhecidas, como podemos ver aqui.

Se você não quer este tipo de tratamento na sua aplicação, alguns proxys oferecem um meio de incluir um header do idioma baseado no endereço IP, como é o caso do nginx. O nginx possui um módulo GeoIP para este fim, e faz uso da base MaxMind.

Consideração final

É sempre importante permitir que o usuário altere o idioma de exibição, de preferência de uma forma simples e intuitiva, como por exemplo, no rodapé da página.

Os exemplos acima mostrados não são infalíveis, como comentado, eles são apenas uma forma de guiar o usuário para algum idioma quando ele faz o primeiro acesso ao seu site. Ao escolher um idioma automaticamente, ou quando o usuário escolher o que ele prefira, lembre-se, guarde isto em algum lugar, para na próxima vez que ele acessar, você exiba a melhor experiência para ele.

Até a próxima.

Referência

Detecting Language of a Visitor Imagem de capa