Como hacer una web multilenguaje

Publicado en December 31, 2009 by Damian

Para detectar el idioma del navegador y hacer una web multilenguaje existen diversos métodos. Yo particularmente suelo usar el siguiente:

Primero creo el archivo lang-functions.php

<?php

    /*

    =============================================================================

     Funcion: detectar_idioma_navegador()

    -----------------------------------------------------------------------------

     Proposito: Esta funcion detecta el idioma por defecto seleccionado en el navegador del visitante.

     Si no se detecta un lenguaje valido, se asigna el selecionado por defecto.

     

    =============================================================================

    */


    function detectar_idioma_navegador() {

    global $conf;

   

    $languages = preg_replace('/(;q=\d+.\d+)/i', '', getenv('HTTP_ACCEPT_LANGUAGE'));

   

    $bol_language_detected = false;

   

    // Comprobamos si el navegador usa alguno de los idiomas que hemos predefinido.

    foreach ($conf['lang_enabled'] as $tmp_arr_language) {

    if (preg_match('/' . $tmp_arr_language . '/i', $languages)) {

    $tmp_str_language_detected = $tmp_arr_language;

    $bol_language_detected = true;

    break;

    }

    }

    // Si el navegador usa uno de los idiomas seleccionados, se devuelve el path del fichero de idioma

    // En caso contrario, se devuelve el path del idioma original

    if ($bol_language_detected) {

    return $tmp_str_language_detected;

    } else {

    return $conf['lang_default'];

    }

    }

Una vez creado el archivo lo incluyo de la siguiente manera:

include("languages/lang-functions.php");
       

        $conf['lang_default'] = 'es'; // idioma por defecto

        $conf['lang_enabled'] = array('es','en');

        $conf['lang'] = detectar_idioma_navegador();

        if(isset($_GET['lang'])) $conf['lang']=$_GET['lang'];// Podemos crear un link como por ej una bandera para permitir cambiar el idioma al usario

        require_once("languages/".$conf['lang'].".php");

Por último nos queda crear los archivos de idiomas de la siguiente forma:

es.php

<? // Spanish language file
   setlocale(LC_ALL,'es_ES');
define("_MENSAJE", "HOLA SOY UN MENSAJE EN ESPAÑOL");
?>

en.php

<? // English language file
   setlocale(LC_ALL,'es_ES');
define("_MENSAJE", "Hi im a English message");
?>

En la web escribiriamos echo (_MENSAJE); y según el idioma del navegador aparecerá de una forma u otra.

Espero que haya servido de ayuda

Comparte este artículo:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • BarraPunto
  • Bitacoras.com
  • email
  • Meneame
  • MySpace
  • Print
  • Technorati
  • Twitter

Links Sponsors

Tags:

Categoría: Tutoriales

Comments (2)

 

  1. sebastian says:

    Gracias!! y si o si hay que tener el contenido separado en distintos idiomas? no se puede tener en uno y que con una funcion cambie ese contenido?.

    • Damian says:

      si podrias tener todo en un solo archivo y cargar una mitad y la otra con un simple if ($conf['lang'] == 'es'){ cargo en español }else{ cargo en ingles }

      Al separarlo estas dividiendo el peso del archivo y tu página es más liviana

Leave a Reply