Laboratorio: multilenguaje mediante Apache
Leyendo un comentario en una entrada de Minid.net, en el que preguntaba cómo redirigir a una url especÃfica según el idioma del navegador, se nos ha ocurrido explicarlo según lo harÃamos nosotros.
Se trata de que la url se redirija a otro directorio según el idioma que nos viene por la cabecera HTTP, por ejemplo: si accedemos a www.dominio.com y nuestro lenguaje es el español, que nos redirija a www.dominio.com/es, y si el idioma es el inglés que acceda a www.dominio.com/en. En nuestro caso, si el idioma no está en la lista de idiomas disponibles accederemos a un idioma por defecto (en).
Para saber el idioma que permite el navegador mediante Apache usaremos la variable %{HTTP:Accept-Language}, la cual nos da la lista de idiomas que admite nuestro navegador. Por ejemplo yo tengo el Firefox para español (es) y para inglés (en), el IE para español y el Opera para inglés.
Deberemos disponer de un directorio especÃfico para cada idioma y en el directorio raÃz deberemos tener un .htaccess que contenga las siguientes lÃneas:
RewriteEngine on
RewriteCond %{HTTP:Accept-Language} (es)
RewriteRule (.*) /es/$1 [R,L]
RewriteCond %{HTTP:Accept-Language} !(es)
RewriteRule (.*) /en/$1 [R,L]
Tendremos que tener un RewriteCond y un RewriteRule para cada idioma que permita nuestro navegador y otras para el idioma por defecto, el cual deberá ser colocado el último. También tendremos que colocar los más “restrictivos” antes que el resto, para que se evalue antes que los demás. Me explico, mi Firefox admite es y en, si escribo las reglas para en antes que para es, siempre me mostrará la página en inglés, cuando lo más seguro es que el inglés sea mi segundo idioma.
Por último tendremos que crear un .htaccess en los directorio de cada idioma que desactive los “rewrites”, para que no se haga un proceso recursivo al evaluarse a si mismo constantemente.
RewriteEngine off
De todas formas, yo personalmente prefiero otros métodos para seleccionar el idioma, el navegador en muchos casos no suele ser instalado por el usuario (hoteles, trabajo, …), por lo que el idioma del navegador puede ser distinto que el idioma del usuario. El idioma debe ser algo seleccionable y que debe recordar la aplicación para no tener que elegirlo cada vez que accedemos a la página.