Detectar El Idioma Del Usuario De Un Sitio Web
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
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
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";
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
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;
O más corto:
header('location: http://'.detectarIdioma()'.miweb.com');
@Ion: Tienes toda la razón.
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]
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]
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
Disculpame mi ingnoracia .. y done se pone eso exactamenete = ( ... ???
Comentar
Los campos con asterisco * son obligatorios.

