Un sitio multilingüe con concrete5 y nginx

 

Tener un sitio es bueno, pero mejor que sea en varias idiomas. Para hacer un sitio que se despliega en el idioma del visitante vamos a usar un poco de lógica concrete5 y nginx rewrite rules. Las rewrite rules de nginx pueden ser cambiadas por rewrite rules de cualquier servidor web decente.

La idea es tener como pagina home de nuestra instalacíon de concrete5 una pagina que desplegué una lista de las idiomas y una subpagina por idioma. La pagina de inicio sirve solamente cuando las reglas de deteccíon de idioma no resultan. Un ejemplo de pagina así se puede ver acá.

Cuando un browser quiere ver una pagina, manda el nombre de la pagina que quiere y también informaciones sobre sus capacidades. Dentro de esas capacidades hay las idiomas preferidas, este header se llama accept_language. Vamos a escribir reglas de reescritura en nginx para tratar con este header.

 

if ( $http_accept_language ~ ^(..) ) {
set $lang $1;
}
if ( $lang ~* fr ) {
rewrite ^(/|/index.php)$ /fr/;
}
if ( $lang ~* en ) {
rewrite ^(/|/index.php)$ /en/;
}
if ( $lang ~* es ) {
rewrite ^(/|/index.php)$ /es/;
}

 

Se puede notar que hacemos el matching sobre / y /index.php para evitar problemas.

Nos falta ajustar las listas de paginas en la izquierda para desplegar solamente las paginas del idioma.