Seleccionar idioma por cookie, navegador y/o menú

Un script para seleccionar el idioma de forma automática según la cookie de idioma o el idioma preferido del navegador, y otro para cambiar de forma manual a través de enlaces de idioma.

Siguiendo en la línea de contribs anteriores de Daniel
Laurent Laville
y Nicolas Hoizey he adaptado un par de scripts (no tienes más que copiar y pegar lo que te interese) que permiten:

-  Selec_idioma_auto: Quienes visitan nuestro sitio entran en su propio idioma de forma automática. Primero se fija si está la cookie de idioma y si no la encuentra mira los idiomas preferidos del navegador.

-  Selec_idioma_menu: otro script que puede sustituir al #MENU_LANG. Esta baliza crea un menú desplegable difícil de personalizar y sin «banderitas». El script que propongo hace un listado en horizontal, no un desplegable, de los idiomas activos en el sitio público con sus banderitas.

Puedes verlos funcionando en pyrene.info (aclaro: en la página inicial de este sitio el idioma afecta de forma obligatoria sólo a los elementos de navegación, los contenidos se cargan por fecha, no por idioma)

Si las cookies están activadas funcionan todas las posibilidades: presentación automática de la página en la lengua seleccionada en la cookie de idioma, si no está la cookie se presenta en la lengua del navegador y si no en la del sitio.

Si las cookies NO están activadas la navegación del sitio se realiza de forma automática en el idioma preferido en el navegador, no se puede cambiar y se muestra un mensaje de advertencia para que se activen las cookies

Paso previo

Para comprobar primero si están activas las cookies hay que añadir en mes_fonctions.php3:

setcookie(’test’,’test’,time()+3600*24*3600*365);

Script: Selec_idioma_auto

Para instalarlo no hay más que colocarlo al principio del esqueleto como php (entre <?php y ?>). Se podría poner como archivo independiente y llamarlo con un include...

<?php

// selecciona idioma por cookie o por navegador
// comprueba si están activadas las cookies y si están personaliza la lengua por cookie

if (isset($HTTP_COOKIE_VARS['test'])){

$idioma_activo=$GLOBALS['spip_lang'];
$idiomas_sitio= lire_meta('langues_multilingue');
$idiomas_navegador = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$idioma_cookie=$HTTP_COOKIE_VARS['spip_lang'] ;
$adresse_site='[(#URL_SITE_SPIP)]';

if (isset($idioma_cookie)){
if ($idioma_cookie != $idioma_activo){

        $lien=$adresse_site."/spip_cookie.php3?url=./&var_lang=".$idioma_cookie;
		echo "<script languaje='JavaScript'>
				location.href='".$lien."';
				</script>";
}
}

// si no ha encontrado idioma en la cookie selecciona idioma de navegador y lo pasa a la cookie

else {

	foreach($idiomas_navegador as $lg) {
	
		$idioma_nav=substr($lg,0,2);
		$lista_idiomas=explode(",",$idiomas_sitio);
		while (list($key,$val) = each($lista_idiomas)){
			foreach($lista_idiomas as $val){
			if ($idioma_nav == $val) {
			$lien=$adresse_site."/spip_cookie.php3?url=./&var_lang=".$val;
			echo "<script languaje='JavaScript'>
					location.href='".$lien."';
					</script>";
			}
			}
		}
	}
}
}

// si no están activadas las cookies coge la lengua del navegador y coloca mensaje de aviso

else {
echo "<div style='background-color:#999999'><multi>[es] Para que funcionen bien los idiomas de este sitio tienen que estar activadas las cookies
<br />[fr] Pourquoi les langues fonctionnen bien il est necesaire que les cookies soient activ&eacute;es</multi>";
echo "</div>";

$idioma_activo=$GLOBALS['spip_lang'];
$idiomas_sitio= lire_meta('langues_multilingue');
$idiomas_navegador = split(",", $_SERVER['HTTP_ACCEPT_LANGUAGE']);
$adresse_site='[(#URL_SITE_SPIP)]';
$pagina_actual=$HTTP_SERVER_VARS['REQUEST_URI'];

if ($idioma_activo!=$idioma) {
foreach($idiomas_navegador as $lg) {
	
		$idioma_nav=substr($lg,0,2);
		$lista_idiomas=explode(",",$idiomas_sitio);
		while (list($key,$val) = each($lista_idiomas)){
			foreach($lista_idiomas as $val){
			
			if ($idioma_nav == $val) {
				if ($pagina_actual=="/"){
			$lien=$adresse_site."?idioma=".$val."&lang=".$val;
			}
			else{
			$lien=$adresse_site.$pagina_actual."&idioma=".$val."&lang=".$val;
			}
						echo "<script languaje='JavaScript'>
				location.href='".$lien."';
				</script>";

			}
			}
		}
	}
	
	}
}
// fin selección idioma

?>

Script: Selec_idioma_menu

Nota: para que funcionen las banderitas hay que crear un directorio «banderas» en IMG y llamarlas «bandera_es.gif» si es la de España y es archivo gif, «bandera_fr.gif» para Francia y en gif, etc

Para personalizar no tienes más que cambiar las opciones de <font> o las que quieras.

Para instalarlo no tienes más que copiar/pegar donde quieras que aparezca

<?php

// menu para cambiar de lengua si las cookies están activas, si no no se muestra

if (isset($HTTP_COOKIE_VARS['test'])){
$lengua=$GLOBALS['spip_lang'];
$lenguas= lire_meta('langues_multilingue');
$lista_lenguas=explode(",",$lenguas);
while (list($key,$val) = each($lista_lenguas)){
	if ($lengua!=$val){
		$nombre_lengua=traduire_nom_langue($val);

$lien = $GLOBALS['clean_link'];
        $lien->delVar('lang');
       	$lien = $lien->getUrl();
   		$post = 'spip_cookie.php3';
       	$postcomplet = new Link($post);
        $postcomplet->addvar('url', $lien);
  		$postcomplet->addvar('var_lang', $val);

echo "<a href=".$postcomplet->geturl()."><font size='3' face='Comic Sans MS, Chalkboard, Georgia, Arial, Lucida Grande'>
		<img src='IMG/banderas/bandera_".$val.".gif' align='absbottom' border='0'/>
		<font style='text-transform:uppercase;'>&nbsp;".$nombre_lengua."&nbsp;&nbsp;</font></font></a>";
		}
	}
}
?>

Y eso es todo por ahora. Que te sea útil.

Dernière modification de cette page le 21 de enero de 2006

Discussion

3 discussions

  • quiero hacer esto pero no entiendo como es que te redirecciona a la pagina segun el ideoma
    yo solo manejo español e ingles aver si saven como puedo hacer esto mismo sin que me afecte un link de la misma pagina

    Responder a este mensaje

  • Hola,

    estoy intentando integrar tu script en un nueva pagina pero no lo he conseguido, ya que me dobla el nombre del sitio, i.e: /protection-international/protection-international/spip.php?var_mode=calcul&idioma=es&lang=es

    Estoy con spip 1.9.2c y tengo activado el $forcer_lang=true; (no parece estar relacionado, lo intenté con y sin el $forcer_lang=true;)

    Una ideá?

    Gracias
    Rainer

    Responder a este mensaje

  • 1

    Hola
    Falta precisar la orden de seleccion de los idiomas. Si llegas con un navegador en fr tienes el menu en fr pero si vas a leer un articulo en es el menu pasa en es.
    Il faudrait préciser l’ordre de sélection des langues : langue de navigation, langue du site, langue des articles ..

    • ¿? No lo entiendo. En las pruebas que he hecho en pyrene.info, cuando has seleccionado un idioma no cambia aunque el artículo en el que entres esté en otro idioma. O sea, está priorizado el idioma del entorno sobre el del contenido y sólo se cambia el del entorno cuando se selecciona de propio ¿no?

      Lo que si quería mejorar era lo de la comprobación de la activación de las cookies porque no me convence mucho el sistema, pero no tengo tiempo de proponer otro.

    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