Varios idiomas en un mismo sitio
Feb 23, 2009 | Español | By Crysfel | 17 Comments | Read in EnglishEn ocasiones es necesario crear sitios o sistemas multilenguaje, en este tema se muestra como detectar el idioma del explorador usando PHP, además de permitir que el usuario pueda cambiar el idioma mediante un combo.
Material de apoyo
Es necesario descargar el material de apoyo, descomprimirlo y copiar los archivos al servidor Web que instalamos previamente en nuestra computadora, dentro de la carpeta “lenguaje” que se creó en el tema anterior.
Al ejecutar el archivo “multilanguage.php” podemos ver que es exactamente el mismo ejemplo del tema anterior a diferencia de que ahora aparece un combo en la parte superior derecha con algunos idiomas definidos.
Detectando el idioma del explorador
Vamos a editar el archivo “multilanguage.php”. Al inicio del archivo vamos a escribir el código necesario para detectar el idioma del explorador, esto se hace leyendo el contenido de la variable SERVER de la siguiente manera:
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
Con esa instrucción tenemos en la variable “$lang” el idioma del explorador en formato es, en, it, fr, etc… pero si el explorador tiene configurado el idioma propio de un país el valor de la variable “$lang” es diferente, por ejemplo el español de México sería es_MX, el español de Chile es_CL, el de Argentina es_AR, en_UK para el inglés del Reino Unido. Lo que necesitamos hacer es extraer los primeros dos caracteres de la variable “lang” de la siguiente manera:
$lang = substr($lang,0,2);
Por último es necesario importar al HTML el fichero con el idioma adecuado, de la siguiente manera:
<script type="text/javascript" src="../ext-2.2/locale/ext-lang-<?php echo $lang; ?>-min.js"></script>
Recuerda que se tiene que importar después del archivo “ext-all.js” para que sobrescriba el idioma que Ext JS tiene por defecto, una vez guardados los cambios puedes probarlos actualizando el explorador donde está el ejemplo. En el video se muestran tres diferentes exploradores con lenguajes diferentes.
Cambiar el idioma mediante el combo
Al seleccionar un lenguaje del combo la página se recarga y envía mediante la variable “lang” el lenguaje seleccionado, para este tema no vamos a prestarle atención a cómo lo hace, más adelante explicaré como agregarle eventos a elementos del documento, por ahora enfocaré este tema solo a la detección de idiomas.
Es necesario verificar si se recibe el parámetro “lang”, pues éste tendrá mayor importancia ya que el usuario ha seleccionado un lenguaje mediante el combo. Si en el request viene el parámetro “lang”, entonces importaremos el lenguaje de la traducción solicitada de lo contrario importaremos el idioma del explorador, esto se traduce a código PHP de la siguiente manera:
if(!isset($_GET['lang'])){
$lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
//es, es_MX, en, en_UK
$lang = substr($lang,0,2);
}else{
//Si el usuario ha seleccionado un lenguaje del combo
}
El siguiente paso es tomar el parámetro “lang” y validar si contiene un lenguaje válido, en este caso vamos a verificar que contenga alguno de los cinco idiomas que soportará el ejemplo, para realizar esto utilizaré un bloque switch.
$lang = $_GET['lang'];
switch($lang){
case 'en':
case 'es':
case 'it':
case 'pt':
case 'ro':
break;
default:
$lang = 'en';
}
Si la variable “lang” contiene en, es, ro, pt o it significa que el contenido de la variable es correcto, por lo tanto no es necesario hacer nada más, pero si no contiene ninguno de estos valores significa que hay un error y le asignamos un valor por defecto, en este caso sería inglés (en).
Conclusión
Esta actividad que acabamos de terminar es suficiente para realizar sitios multilenguaje, como puedes ver fue muy sencillo. Si tienes alguna duda o sugerencia puedes dejarla en los comentarios.







Como hago para que en el combo aparezca por defecto el idioma del navegador y para que se mantenga ese valor cuando lo modificas? Porque cuando vos cambias de idioma el combo fijate que vuelve a decir por defecto “English”.