Ver Mensaje Individual
  #13 (permalink)  
Antiguo 17/10/2007, 12:16
tammander
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 1 mes
Puntos: 7
Re: ASP y XML – Una aproximación: Cambiar el idioma a nuestro sitio web

Disculpad la tardanza. He estado fuera y no he podido continuarlo. Aqui voy


Directivas sobre recepción y grabación de de datos de Idioma

Uno de los problemas a los que nos vamos a enfrentar cuando hagamos un sistema de idiomas es la forma en que vamos a recibir la información sobre el idioma y donde la vamos a guardar.

La recepción de cambio de Idioma

Generalmente cuando queramos cambiar de idioma lo haremos creando un enlace donde parametrizaremos el cambio en la dirección URL (GET):

<a ref.=”<%= request.ServerVariables("SCRIPT_NAME") %>?lang=en”>Inglés</a>

Esta es la forma más facil: creando un parámetro que defina el cambio. En este caso es el par lang=en. Y así lo haríamos con todos los idiomas disponibles.

Otra forma similar es usar un form para enviar la misma información pero a través del método POST:

<form method=”post” action=” request.ServerVariables("SCRIPT_NAME") %>”>
<input type=”hidden” name=”lang” value=”en” />
<input type=”submit” value=”Inglés” />
</form>

Método mucho mas enrevesado que el anterior a mi entender.

Ya tenemos la el método que utilizaremos para generar el cambio de idioma: a través de GET usando luego el request.QueryString para identificarlo.

La grabación del nuevo Idioma

El otro problema que tenemos es cómo vamos a mantener ese idioma durante la navegación del usuario por nuestras páginas. Tenemos varias alternativas:

1 – Usando el mismo método que usamos para cambiar el idioma: Parametrizamos todos los enlaces que haya en nuestro sitio web. Este es un método artesanal, seguro (no depende de cookies) y fiable: simplemente añadimos el par variable=Idioma a todos los enlaces. Es tedioso pero robusto.

2 – Usando cookies: Es rápido y muy facil de implementar. Usando response.cookies(variable) = Idioma para guardar la información y request.cookies(variable) para recuperarla. El único inconveniente que tiene es que dependemos de que el usuario tenga habilitado las cookies.

3 – Usando variables de sesión: Aunque usar variables de sesión parezca el mejor método tenemos el mismo problema que usando cookies: Si está deshabilitado el uso de cookies en el cliente, no podremos usar sesiones. Recordad que IIS guarda una cookie con el sessionID del usuario para poder asignarle entre una página y otra las variables y sus valores que le corresponda a cada usuario.

Tenemos 3 posibilidades. Cada cual puede elegir el método que prefiera o hacer una mezcla entre ellos (si vemos que el usuario no acepta cookies pues lo hacemos parametrizando, en caso contrario lo hacemos con sesiones, por ejemplo). Yo voy a optar por el método más sencillo: voy a guardarlo en una sesión.

Definiendo el idioma por defecto

Nos queda una cosa más: la primera vez que el usuario entra en nuestro sitio web, ¿cómo sabemos que idioma poner si el usuario todavía no nos lo ha dicho?. Existen dos posiblilidades:

1 – Que nos lo diga su navegador. Las variables del servidor nos pueden dar muchos datos del navegador del cliente: el nombre, la versión, su IP, su idioma… ¿su idioma? Si. Existe una variable de servidor que nos da su idioma (el que tiene instalado en su navegador). Esta variable es: Http_Accept_Language

Esta variable nos va a devolver algo asi : es-es,es;q=0.5

De todo asta información lo que realmente nos interesa son los dos primeros dígitos ya que nuestro sistema se basa en la codificación de paises en dos letras (2-letter-iso-code). Para ello nos hacemos una pequeña función

Idioma = Trim(left(request.ServerVariables("HTTP_ACCEPT_LAN GUAGE"),2))

2 – Se lo decimos nosotros. Si nuestro eficiente sistema, a pesar de todo no reconoce nada de nada siempre nos queda usar una constante para asignarle el idioma:

Const DEFAULT_LANGUAGE = “es”

Y luego asignárselo a la variable que ha estado pasando la criba, al final de esta:

Idioma = request.QueryString(“lang”)
If Idioma = “” then Idioma = Session(“Idioma”)
If Idioma =”” then Idioma = Trim(left(request.ServerVariables("HTTP_ACCEPT_LAN GUAGE"),2))

If Idioma = “” then Idioma = DEFAULT_LANGUAGE
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -