Idioma
Categoría
Buscar

Detectar el idioma utilizado en el navegador del usuario mediante PHP

Cómo obtener el idioma del navegador en PHP y cómo usar esta información para crear un script que reciba este valor si no se configura ningún idioma

Detectar el idioma utilizado en el navegador del usuario mediante PHP
En PHP Por Rudi Drusian
Publicado el
Última actualización

Es posible saber qué idioma está definido actualmente en el navegador del usuario mediante la súper variable global de PHP $_SERVER, consultando el índice 'HTTP_ACCEPT_LANGUAGE'.

PHP

<?php
   echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
   # Se espera algo asi: es,pt-BR,en;q=0.5
?>

Para obtener solo la parte que importa, que son las dos primeras letras:

PHP

<?php
   echo substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2)
   # Se espera algo asi: es
?>

Para crear un script en PHP donde el usuario puede definir el idioma mediante una solicitud GET desde un formulario y si no se elige ningún idioma, se usa el idioma actual del navegador si se encuentra entre ciertos idiomas predeterminados.

PHP

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

La función in_array de este script verifica si el idioma está entre los configurados en el arreglo (es, pt, en), es decir, Español, Portugués o Inglés y si no encuentra el idioma, lo configura en Español (es). Esto garantiza que la variable $lang siempre tendrá un valor válido y esperado.

Referencias

Este no es mi idioma original y no lo hablo muy bien. Utilicé mis pocos conocimientos y herramientas de traducción para redactar el texto de este artículo. Disculpe los posibles errores ortográficos o gramaticales, se agradecen sugerencias de correcciones y se pueden enviar al correo electrónico de contacto que se encuentra en el pie de página del sitio. Mi intención es compartir algunos conocimientos y espero que esta traducción sea lo suficientemente buena.