Detectar el idioma para una web multilingüe en PHP

Si queremos hacer una web multilingüe uno de los problemas que encontramos es el de decidir cuál será el idioma de la portada. Podemos hacer una portada bilingüe, pero quedará enmarañado, feo.

Por suerte, la mayoría de navegadores envían una cabecera con información sobre las preferéncias de idioma de los usuarios. Podemos hacer uso de esas cabeceras en PHP y así servirles la página que mas se aadecúe. En este caso solo necesitaremos escoger un idioma para el raro caso que el navegador no soporte esta característica.

El código PHP para hacerlo sería el siguiente (faltan las etiquetas de apertura y cierre):

$idioma = "en";
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != '') {
    $idiomas = explode(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    foreach ($idiomas as $i){
        if (strtolower( substr( $i, 0, 2) ) == "es"){
            $idioma = "es";
            break;
            }
        if (strtolower( substr($i, 0, 2) ) == "en") break;
        }
    }
header ('HTTP/1.1 300 Multiple choices');
header("Location: ".$idioma."/index.php");
exit;

La 1a asignación de la variable "$idioma" es la opción por defecto.

En este código se dá por entendido que los contenidos están en las carpetas "es/index.php" y "en/index.php". Camibad las asignaciones a "$idioma" y el último header para adaptarlo a vuestra web y ya tenéis la detección de idioma lista.

    Editado por Daniel el 13/02/2009 a las 15:54:47h.