Blog Agencia Web

Detectar El Idioma Del Usuario De Un Sitio Web

icon timeRicardo Aroca | 04 de octubre de 2006 | icon comment61 comentarios

Al momento de construir un sitio web multi-idioma se presenta el problema de reconocer cuál es el idioma de nuestro usuario. Es común colocar una página de inicio donde el propio usuario seleccione un idioma. Esto agrega un clic más a la búsqueda de información por lo que no es totalmente recomendable.

Una buena solución al problema es ocupar la cabecera HTTP_ACCEPT_LANGUAGE. El navegador que ocupemos (IE, Firefox, Opera, etc.) al solicitar una página a un servidor envía varios datos, entre ellos la cabecera HTTP_ACCEPT_LANGUAGE, la que contiene el código del idioma del sistema operativo o el especificado en el propio navegador.

Utilizando PHP , podemos recoger ese valor, analizarlo y entregar al usuario la página en un idioma adecuado, sin que el tenga que hacer la selección.

Veamos una función en PHP que analiza la cabecera HTTP_ACCEPT_LANGUAGE y devuelve el código del idioma adecuado a nuestro criterio.

function detectarIdioma(){

//revisamos cabecera HTTP_ACCEPT_LANGUAGE

$idiomas = explode(";", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
if(strpos($idiomas[0], "es") !== FALSE){
$idioma = "es";
}
elseif(strpos($idiomas[0], "en") !== FALSE){
$idioma = "en";
}

//Ante cualquier otro idioma devolvemos "es"
if($idioma <> "es" && $idioma <> "en"){
$idioma = "es";
}
return $idioma;
}

Utilizando esta función podemos detectar el idioma del usuario y hacer que nuestro sitio web actúe en base a esa información. Es una buena idea poner en cada página un link "Ver esta página en [otro idioma]", para de este modo cubrir los casos en los cuales la detección automática del idioma falle.

Es casi obvio pero no está de más decir que es recomendable que el idioma por defecto sea el que ocupe la mayoría de tu público objetivo.

Comentarios

gravatar

1 El 12 de octubre de 2006 Hildergarn escribió

Que buén artículo. Estoy empezando en esto de PHP y no tengo idea de como colocar un enlace con el código que publicastes. Te agradecería una ayuda con esto.

Saludos

gravatar

2 El 30 de enero de 2007 samuel escribió

Hola Hildergarn, para colocar este codigo php lo mejor es hacerlo antes de poner codigo html, es decir, lo primero de todo. Hazlo así:
<?
...codigo
?>

Donde ....codigo es todo lo que puso Ricardo. Aunque en la primera lína debes insertar un salto de línea de tal manera que te quede así:
/revisamos cabecera HTTP_ACCEPT_LANGUAGE
$idiomas = explode(";",$_SERVER['HTTP_ACCEPT_LANGUAGE']);
if(strpos($idiomas[0], "es") !== FALSE){
$idioma = "es";

gravatar

3 El 24 de enero de 2008 Raul escribió

Hola, enhorabuena por el artículo!
simplemente quisiera saber qué código hay que poner para que al detectar el idioma del navegador redireccione a la web en español (si el navegador está en español) o a la inglesa (si detecta que está en ingles. Estas páginas estararían en dos subdominios es.miweb.com y en.miweb.com.
Si me ayudaras te estaria agradecido muchísimo
Un saludo desde Madrid

gravatar

4 El 24 de enero de 2008 el Autor escribió

Raul:
Debes usar la función header, de la cual puedes ver más información en el manual de php..
Por ejemplo:

if ( detectarIdioma() == "es" ) :
header('Location: http://es.miweb.com');
elseif ( detectarIdioma() == "en" ) :
header('Location: http://en.miweb.com');
else:
header('Location: http://es.miweb.com');
endif;

gravatar

5 El 15 de agosto de 2008 Jon escribió

O más corto:
header('location: http://'.detectarIdioma()'.miweb.com');

gravatar

6 El 16 de agosto de 2008 el Autor escribió

@Ion: Tienes toda la razón.

gravatar

7 El 23 de abril de 2009 hass escribió

hola a todos, para obtener el idioma especificado por el usuario en el navegador se puede obtener simplemente con la siguiente linea de codigo. salu2
[code]substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2)[/code]

gravatar

8 El 23 de abril de 2009 hass escribió

hola a todos, para obtener el idioma especificado por el usuario en el navegador se puede obtener simplemente con la siguiente linea de codigo. salu2
[code]substr($_SERVER["HTTP_ACCEPT_LANGUAGE"],0,2)[/code]

gravatar

9 El 20 de junio de 2009 Felipe escribió

Todas estas técnicas estan +o- bien pero no son fiables al 100%, ya que nos estamos fiando de que un servidor o que un usuario tenga las cosas bien y eso no siempre es asi ;).
Lo ideal es que miraramos la página en questión y buscaramos palabras que son propias del idioma, esto es lo que hace google con su detector de idioma, asi puede clasificar las webs por idioma

gravatar

10 El 06 de febrero de 2010 joel escribió

Disculpame mi ingnoracia .. y done se pone eso exactamenete = ( ... ???

Comentar

Los campos con asterisco * son obligatorios.

No se mostrará publicamente

Escribe la dirección sin http://


Etiquetas permitidas: a,strong, em, cite, blockquote, pre, code.

Opciones

Categorias

Suscribirse

Reciba automáticamente en su lector RSS las últimas publicaciones del blog.

Selección de Blogs

Publicidad

Contrata Planes Hostagator haciendo Clic Aquí

Agencia Web utiliza Hostgator para todos sus proyectos. Si quieres saber por qué, haz clic aquí.


Servicios