Objetivo do tutorial

Mostrar como identificar o idioma definido no navegador do usuário, utilizando a linguagem de programação PHP. Também mostraremos alguns exemplos de como utilizar essa informação em uma página web. Essa funcionalidade pode ser muito útil ao criar um website multilíngue ou personalizar a exibição de conteúdo de acordo com o idioma preferido do visitante.

A seguir mostraremos como você pode realizar essa detecção de maneira simples e eficiente, onde utilizaremos a variável super global do PHP, $_SERVER:

 

1.  Detectando a informação do idioma no cabeçalho HTTP

1.1. Inicialmente vamos obter a informação do idioma através do cabeçalho HTTP_ACCEPT_LANGUAGE, que é enviado pelo navegador do usuário para o servidor. Este cabeçalho contém informações sobre os idiomas preferidos configurados no navegador do usuário.

1.1.1. No PHP, podemos usar a variável global $_SERVER['HTTP_ACCEPT_LANGUAGE'] para obter esses dados.

1.1.2. Veja o exemplo abaixo onde podemos detectar os idiomas preferidos definidos do navegador utilizado pelo usuário que irá visitar o seu site. Esses dados geralmente são configurados no momento da instalação do navegador.

<?php
   echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
   # Esperado algo como: pt-BR,en;q=0.5

laughing Para testar os exemplo mostrado acima e verificar quais são os idiomas preferidos no seu navegador, acesse o link: Visual Dicas - Ex 06_1.

 1.1.3. Veja o exemplo do resultado realizado em um navegador instalado no meu computador:

1.1.4. Observe que o valor retornado pelo HTTP_ACCEPT_LANGUAGE foi uma string no formato parecido com pt-BR,en-US;q=0.7,en;q=0.3, onde:

1.1.4.1. q= significa a ordem de preferência do usuário (quality factor).

1.1.4.2. Por exemplo en;q=03 (idioma inglês geral ) tem fator de qualidade 0,3, e portanto, com menor preferência que en-US;q=07 (inglês regional dos USA que tem fator de qualidade 0,7.

1.1.4.2. Quando q= não é informado, significa que o idioma tem fator de qualidade de 1,0, ou seja, a maior preferência do usuário. Portanto, pt-BR  é o idioma preferido do usuário, seguido de en-US e finalmente por en.

1.1.5. Normalmente, o valor retornado é uma string na ordem de preferência do navegador, ou seja, dada pela quality factor e não pela posição textual. Pelo menos, são os valores lidos nos principais navegadores de internet atuais, embora nada garanta que esta lista sempre virá nesta ordem. Leia também: Detectar linguagem do browser e redirecionar

2.  Obter apenas o idioma de maior preferência do navegador

2.1.  Na prática, o programador precisa apenas do idioma de maior preferência quando utiliza uma página web multilíngue. Para isso, precisamos obter apenas as 2 primeiras letras que indicam o idioma geral utilizado pelo navegador do usuário. Isto é importante porque permite criar um script para receber este valor caso nenhum idioma idioma esteja ainda configurado.

2.1.1. Veja um exemplo abaixo de como obter apenas o idioma principal:

2.1.1.1. Neste exemplo obtemos o idioma principal geral, ou seja, não considera-se a regionalidade do idioma.

<?php
   echo substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)
   # Esperado algo como: pt

laughing Para testar os exemplo mostrado acima e verificar qual o idioma principal do seu navegador, acesse o link: Visual Dicas - Ex 06_2.

 2.1.2. Veja o exemplo do resultado realizado em um navegador instalado no meu computador:

2.1.3. Observe que utilizamos a função de string substr() para retornar apenas os 2 primeiros caracteres do valor retornado pela variável global $_SERVER['HTTP_ACCEPT_LANGUAGE'].

3. Criando um script para determinar um idioma padrão para uma página web

3.1. Podemos criar um script para que uma página web, quando não existe uma função definida pelo usuário, possa adotar a linguagem atual do navegador do usuário que estiver acessando essa página.

3.1.1. No exemplo a seguir, vamos apresentar um script para que se defina um idioma padrão para uma página web a partir do idioma identificado pelo navegador do usuário.

3.1.1.1. O idioma padrão da página web é definida por uma requisição GET e caso nenhum idioma seja escolhido por esse critério, o script irá definir como padrão o idioma principal do navegador do usuário.

<?php
   if (isset($_GET['lang'])) {
      $lang = $_GET['lang'];
   } else {
      $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
   }
   if (!in_array($lang, array("pt","en","es"))) $lang = "pt";

3.1.2. A função in_array() neste script checa se o idioma esta entre as configuradas no array (pt, en, es), ou seja, Português, Inglês ou Espanhol, e caso não encontre a linguagem especificada irá defini-la, neste caso, como Português (pt). Assim garante que a variável $lang sempre tenha um valor válido e esperado.

Documentação Oficial

1. [Documentação PHP - $_SERVER] » Sobre a variável global $_SERVER[]: Informação do servidor e ambiente de execução

2. [Documentação PHP - substr()] » Sobre a função substr(): Retorna parte de uma string

3. [Documentação PHP - in_array()] » Sobre a função in_array: Checa se um valor existe em um array

Cursos

 Aprenda a ser um programador mais do que completo (Pacote Full Stack)

 

Compartilhe:

Área do Usuário

Doações

Por favor, ajude o nosso site a se manter online :)

 Obrigado!
Angelo Luis Ferreira
angelo.alf@gmail.com

Produzido por:

Topo