Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/12/2007, 18:12
jferrero
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 1 mes
Puntos: 11
Información Re: Idioma en mi página

Te recomiendo que mires la opción Negociación de Contenidos del Apache.

Es el propio cliente el que solicita un idioma en preferencia a otros. Tu trabajo como webmaster es la de crear versiones de las páginas en diferentes idiomas, y luego, según como se indica en el enlace que te puse, es el propio servidor web el que sirve las páginas según el idioma que solicite el usuario.

Por ejemplo. Si yo tengo un fichero index.html, puedo crear las versiones francesa (index.fr.html), inglesa (index.en.html) y española (index.es.html). Luego, activo el sistema MultiViews en el directorio donde están los ficheros y... listo.

Ahora bien... ¿y si es un alemán el que visita la página? Bueno, podemos hacer un enlace simbólico index.en.html -> index.html.html y de esta manera saldrá la página en inglés, como página por defecto.

Esto es lo sencillo... pero no es tan sencillo...

Resulta que de inglés hay 13 variedades (13 dialectos de inglés), de francés hay 6, y de español hay 20 (toda sudamérica, España, ...).

Si alguien desde Argentina se conecta y en su navegador está indicado que prefiere ver las páginas en Español de Argentina, tendrá en código es-ar, que será distinto del es-co de colombia, etc. etc. y desde luego, distinto del es que has configurado antes.

Hay un truco. Bueno, hay más de una forma de hacerlo. Esta es una de ellas.

Consiste en crear un fichero .htaccess que el servidor web lee antes de servir las páginas. Lo dejas en el mismo directorio. Dentro de él escribes:

Código:
AddLanguage es .es1
AddLanguage es-ar .es2
AddLanguage es-bo .es3
AddLanguage es-cl .es4
AddLanguage es-co .es5
AddLanguage es-cr .es6
AddLanguage es-ec .es7
AddLanguage es-sv .es8
AddLanguage es-us .es9
AddLanguage es-gt .es10
AddLanguage es-hn .es11
AddLanguage es-mx .es12
AddLanguage es-ni .es13
AddLanguage es-pa .es14
AddLanguage es-py .es15
AddLanguage es-pe .es16
AddLanguage es-pr .es17
AddLanguage es-ve .es18
AddLanguage es-do .es19
AddLanguage es-uy .es20
AddLanguage en .en1
AddLanguage en-au .en2
AddLanguage en-bz .en3
AddLanguage en-ca .en4
...
y así con todas las variantes de los idiomas que quieres soportar.

Luego, las páginas 'oficiales' tendrán estos nombres:
Código:
index.html
contenido.html
menu.html
Es decir, sin variar para nada su nombre. Eso nos facilitará su edición con nuestro programa gestor de sitios webs. Pero cada idioma, separado en su carpeta correspondiente (es/, en/, fr/, de/...)

El truco viene ahora. Queremos que el servidor web acceda a la carpeta del idioma que el usuario ha solicitado. Eso quiere decir que tenemos que "guiar" al servidor web desde un fichero que vamos a colocar ahora, hasta el mismo fichero dentro del directorio de idioma. La forma de hacerlo será la de crear una batería de enlaces simbólicos, apuntando a los ficheros de idiomas distintos.

Será mejor verlo con un ejemplo.

Supongamos que un inglés accede a nuestro web y solicita la página index.html. Su cliente web tiene indicado que desea ver las páginas en inglés de Australia (en-au), y así nos llega en la cabecera HTTP: Accept-Language: en-au.Pero nosotros solo tenemos una variante de inglés hecha (en/index.html) así que esa es la página que queremos devolverle.

Gracias a la presencia del fichero .htaccess, el servidor web sabe que
Código:
AddLanguage en-au .en2
que quiere decir que cuando un australiano solicite una página de las nuestras, tiene que buscar por ficheros que tengan como extensión '.en2', en alguna parte del nombre del fichero.

Bien... pues lo que queda por nuestra parte es hacer un enlace simbólico que relacione un fichero con esa extensión, con el fichero en/index.html.

Haremos en realidad dos enlaces simbólicos, así:
Código:
index.html.en -> en/index.html
index.html.en1.en2.en3.en4.en5.en6.en7.en8.en9.en10.en11.en12.en13 -> en/index.html
Fijarse que en la segunda línea hemos creado un fichero que contiene en su nombre todas las extensiones con las variantes de idiomas del inglés.

El servidor web buscará por el directorio actual por un fichero que tenga 'index.html' y '.en2' en el nombre. Encontrará nuestro segundo enlace simbólico, que, finalmente, le redirige a nuestro deseado fichero en/index.html. Y ese es el fichero que se le devuelve al australiano.

El primer enlace simbólico está puesto porque hay ocasiones en que las páginas hacen referencia entre sí (una página puede tener un enlace directo a index.html.en).

No cuesta nada hacer un programa que crea y mantenga esos enlaces simbólicos cada vez que varía el árbol de dependencias del sitio web.

Hay otras formas de hacerlo. Y también se puede variar la notación de las páginas y los enlaces entre ellas, pero lo más complicado de todo esto es mantener un orden para el servidor web y al mismo tiempo trabajar con el programa gestor de sitios.