El idioma preferido del visitante
En un navegador, una persona puede indicar cuales son sus idiomas de predilección, y en función de esto, un servidor web podrá modificar su comportamiento, y en particular seleccionar el idioma en el cual muestra sus páginas.
En Mozilla, por ejemplo, se hace editando las preferencias. En la siguiente figura le indico que prefiero ver un sitio web en español, variante uruguaya si existe, sinó en francés, y finalmente en inglés.

En realidad, un sitio web aparacerá en el idioma preferido de la visitante sólo si fue diseñado para eso. La información del idioma está disponible y la manera de presentarla es parte de las normas HTTP/HTML, pero es necesario que el servidor la utilice.
En esta contribución, explicaremos como construir un sitio SPIP multilingüe que utiliza esta funcionalidad: quien visita el sitio se verá presentar automáticamente la portada en el idioma existente que mejor corresponda a sus preferencias.
La idea para SPIP
La facilidad que acabamos de presentar es interesante y factible cuando el sitio multilingüe que construimos tiene vocación a presentar la totalidad de su información (o casi) en cada uno de los idiomas que maneja. En tal caso, la manera más común de organizar un sitio SPIP multilingüe es reservar un sector [1] a cada uno de los idiomas del sitio [2].
Si bien existe un esqueleto para la portada del sitio (sommaire.html), la manera más lógica de construir la portada en cada uno de los idiomas será sin duda con la página de sección del sector correspondiente.
La idea es de utilizar el esqueleto sommaire.html para detectar los idiomas de predilección del navegador y efectuar la redirección a la sección correspondiente.
Las funciones PHP utilizadas
En este bucle utilizaremos algunas variables y funciones PHP:
$_SERVER['HTTP_ACCEPT_LANGUAGE'] es una variable reservada a través de la cual se accede, en PHP, a la lista de idiomas preferidos del usuario;
split() es una de esas funciones potentes que propone PHP para transformar eficazmente una cadena de caracteres en una tabla (array);
header() es la función PHP que permite devolver al navegador un encabezado HTTP. El encabezado que se manda es "Location: [URL]" [RFC2612 14.30, página 134], donde URL es una redirección HTTP.
El código de la solución
Para realizar la redirección, alcanza con crear un esqueleto de portada sommaire.html que contenga el siguiente código:
Por supuesto, se pueden suprimir las líneas entre /* y */ que sólo son comentarios para entender el programa.
Para terminar de entender como funciona este esqueleto, recordemos que SPIP es una especie de «pre-procesador PHP»: a partir de los esqueletos y de los datos de la base, SPIP construye un fichero PHP que se guarda en la caché y se ejecuta cada vez que se llama la página.
Supongamos que nuestro sitio tiene tres sectores: el número 1 en español, el número 2 en francés, y el número 15 en árabe. A partir del esqueleto, SPIP va a crear en la caché un fichero con el siguiente código PHP (suponemos que se han suprimido los comentarios):
Y cada vez que una persona visita esta página, dicho código PHP se ejecuta con el valor de sus preferencias en $_SERVER['HTTP_ACCEPT_LANGUAGE'].
El esqueleto de la portada
Utilizando las facilidades para internacionalizar los esqueletos, puede valer la pena de crear un único esqueleto multilingüe para todos los idiomas. Sin embargo, como ya utilizamos el esqueleto de portada sommaire.html (que, de todas maneras, no permitía en si distinguir el idioma de preferencia), será necesario crear esqueletos de sección para cada uno de los sectores de idiomas, si queremos que la portada es diferente de las demás secciones. Una solución puede ser:
crear un esqueleto específico sommaire_lang.html y sommaire_lang.php3
crear, para cada uno de los sectores, un esqueleto rubrique=N.html (donde N es el número de sector: 1, 2 y 15, en nuestro ejemplo anterior) que sólo contenga la inclusión del esqueleto precedente: <INCLURE(sommaire_lang.php3){id_rubrique}.

