Presentar el sitio publico en el idioma preferido del navegador

Un esqueleto que permite presentar a quienes visitan el sitio una portada en su idioma de predilección, escogido en las preferencias del nevagador.

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:

<?php
/* 
 * Construir la tabla $idiomas con los idiomas preferidos del  
 * navegador del visitante
 */
$idiomas = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach( $idiomas as $lg ) {
/* 
 * para cada idioma preferido por el visitante 
 */
<BOUCLE_sectores_idioma(RUBRIQUES){racine}>
        /* 
         * Un bucle de los sectores, es decir de los idiomas del 
         * sitio 
         */

	if (substr($lg,0,2) == "#LANG") {
	/* 
	 * si el idioma preferido (sin variante) es igual 
         * al idioma del sector, redirigir al sector
	 */
		header("Location: #URL_RUBRIQUE");
		exit;
	};	
</BOUCLE_sectores_idioma>
}
	/* 
	 * si ninguno de los idiomas preferidos existe en el sitio 
	 * redirigir al sector del idioma principal (el primero)      
	 */
<BOUCLE_idioma_omision(RUBRIQUES){racine}{0,1}>
	header("Location: #URL_RUBRIQUE");
</BOUCLE_idioma_omision>
?>

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):

<?php

$idiomas = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach( $idiomas as $lg ) {

	if (substr($lg,0,2) == "es") {

		header("Location: rubrique.php3?id_rubrique=1");
		exit;
	};	

	if (substr($lg,0,2) == "en") {

		header("Location: rubrique.php3?id_rubrique=2");
		exit;
	};	


	if (substr($lg,0,2) == "ar") {

		header("Location: rubrique.php3?id_rubrique=15");
		exit;
	};	
}
	header("Location: rubrique.php3?id_rubrique=1");
?>

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}.

Notas

[1recordemos que se le llama sector a una sección de primer nivel, es decir situada en la raíz del sitio.

[2Para una discusión más completa sobre la manera de construir un sitio multilingüe con SPIP, ver la documentación «Hacer un sitio multilingüe».

Cabe mencionar que no inventé yo solo este código, sino que me inspiré de algún ejemplo encontrado en internet (que no vuelvo a ubicar a la hora de escribir la presente). El aporte está en adaptar a SPIP un ejemplo PHP.

Dernière modification de cette page le 29 de diciembre de 2003

Discussion

2 discussions

  • Si, bajate el php trad, o el appserv

    Responder a este mensaje

  • 1

    Como le hago para que mi computadora funcione como servidor WEB?, quiero saber si existe la pisibilidad de tener paginas en mi comp. y publicarlas y verlas desde cualquier maquina conectada a internet.

    De existir la posibilidad; que es lo que necesiso?

    • No es realmente el lugar para tal pregunta, pero bueno...

      Primero: necesitas una conexión a internet permanetne, tipo DSL, y deberás dejar la computadora prendida 24h/24. También necesitarás que tu proveedor te dé una dirección IP fija.

      Segundo: te aconsejo ponerle un sistema operativo en Linux. Con una distribución Knoppix o una Ubuntu tienes todo lo necesario y son fáciles de instalar.

      Para que tu máquina sirva como servidor web, tienes que instalar y
      activar al menos un servidor web, por ejemplo Apache. Luego tendrás que configurar un nombre de dominio que llequea tu máquina.

      Pero ante todo te sugiero buscar foros donde se discuta de eso...

    Responder a este mensaje

Comentar este artículo

¿Quién es usted?
  • [Conectarse]

Para mostrar su avatar con su mensaje, guárdelo en gravatar.com (gratuit et indolore) y no olvide indicar su dirección de correo electrónico aquí.

Añada aquí su comentario

Este formulario acepta los atajos de SPIP, [->url] {{negrita}} {cursiva} <quote> <code> y el código HTML. Para crear párrafos, deje simplemente una línea vacía entre ellos.

Añadir un documento

Seguir los comentarios: RSS 2.0 | Atom