Foros del Web » Programando para Internet » ASP Clásico »

problema constantes repetidas en ficheros de idiomas (Name redefined)

Estas en el tema de problema constantes repetidas en ficheros de idiomas (Name redefined) en el foro de ASP Clásico en Foros del Web. El tema es que he creado 3 archivos .asp (uno para cada idioma: ES, EN, FR), y cada uno es llamado dependiendo del idioma del ...
  #1 (permalink)  
Antiguo 18/02/2013, 18:27
 
Fecha de Ingreso: febrero-2006
Mensajes: 233
Antigüedad: 18 años, 2 meses
Puntos: 3
problema constantes repetidas en ficheros de idiomas (Name redefined)

El tema es que he creado 3 archivos .asp (uno para cada idioma: ES, EN, FR), y cada uno es llamado dependiendo del idioma del navegador:

Código:
if idioma = "es" then 
<!--#include file='lang_esp.asp'-->
fichero lang_esp.asp
Código:
<%
	Const Bienvenido= "¡Bienvenido!"		
	...
%>
el problema es que no acepta constantes (o variables Dim) con el mismo nombre y me aparece el error: Name redefined.

¿Alguna idea? Estoy probando sin definir que sea constante o variable y parece que funciona, pero he leído que tendrían que ser constantes.
lang_esp.asp
Código:
<% 
	Bienvenido = "¡Bienvenido!"
%>
Y sobre el idioma, tengo que hacer el split de la cadena para la detección de idioma, pero veo que sería complicado recuperar el segundo atributo de cada idioma ya que no hay uniformidad de formato:
es,es;q=0.8 (desde la primera coma)
en-US;q=0.6 (desde el primer guión)
en;q=0.4 (no tiene segundo atributo)

Código:
es,es;q=0.8,en-US;q=0.6,en;q=0.4
Gracias!

Última edición por red_robe; 18/02/2013 a las 18:36
  #2 (permalink)  
Antiguo 24/02/2013, 10:14
 
Fecha de Ingreso: febrero-2006
Mensajes: 233
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

¿nadie? :(
  #3 (permalink)  
Antiguo 25/02/2013, 13:36
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

Cita:
Iniciado por red_robe Ver Mensaje
¿nadie? :(
Hola red_robe, me parece que tu problema es más bien conceptual.
  • Constante: Es un identificador cuyo valor no puede ser alterado durante la ejecución de un programa.
  • Variable: Es una referencia a una localidad de memoria cuyo valor es conocido o desconocido y que puede ser alterado durante la ejecución de un programa.

Tu escenario:
  • Estructura de control que asigna valores (if)
  • Contenedores de valores (éstos valores son cambiados en tiempo de ejecución de acuerdo a tu estructura de control)
Simplemente a golpe de vista se ve que tienes que utilizar variables y no constantes.

Acerca del error:
Name redefined - Nombre redefinido
Para ASP clásico, el include es lo primero que el servidor interpretará, por lo tanto, si defines tus variables en cada archivo, lo que el servidor está leyendo es:

Código ASP:
Ver original
  1. 'Español
  2. Dim Bienvenido= "¡Bienvenido!"
  3. 'Inglés
  4. Dim Bienvenido = "Welcome"
  5. 'Francés
  6. Dim Bienvenido = "Accueil"

Esto claramente está mal pues no puedes definir el mismo nombre múltiples veces dentro de un archivo.

La solución

1. Crea un archivo donde definas todas tus variables en inclúyelo antes de tus otros includes, asegúrate que este sea incluído una sola vez:

Código ASP:
Ver original
  1. Dim Bienvenido
  2. Dim QueGustoVerte
  3. Dim HastaPronto
  4.  
  5. <!--#include file = "lang_variables.asp"-->

2. Debajo de este include puedes poner tu if con los demas includes de idiomas, éstos includes no deben dimensionar ninguna variable, solo deben asignar valores

'Archivo español
Bienvenido = "Bienvenido!"

'Archivo inglés
Bienvenido = "Welcome"

'Archivo francés
Bienvenido = "Accueil"

Al final tu estructura debería verse similar a:

Código ASP:
Ver original
  1. <!--#include file = "lang_variables.asp"-->
  2.  
  3. Select case idioma
  4.    case "es"
  5.       <!--#include file='lang_esp.asp'-->
  6.    case "en"
  7.       <!--#include file='lang_eng.asp'-->
  8.    case "fr"
  9.       <!--#include file='lang_fr.asp'-->
  10. End Select

Y eso es todo
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #4 (permalink)  
Antiguo 26/02/2013, 06:17
 
Fecha de Ingreso: febrero-2006
Mensajes: 233
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

muchas gracias u_goldman!

ya detecto el idioma del navegador y en función de él ya muestra la página en uno u otro idioma:

Código ASP:
Ver original
  1. Dim pais, idioma
  2. pais = Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
  3. idioma = Left(pais, 2)
  4. session("idioma_usuario") = idioma
  5. Select case session("idioma_usuario")
  6.        case "es"
  7.         %><!--#include file="lang_esp.asp"--><%
  8.        case "en"
  9.        %><!--#include file="lang_eng.asp"--><%
  10.        case "fr"
  11.            %><!--#include file="lang_fr.asp"--><%
  12.     end Select


Ahora tengo el problema con el cambio de idioma mediante los botones de tipo enlace <a href>. El enlace <a> (para el caso del idioma FR de prueba) carga la función en javascript SetLanguage donde cambia el valor de la variable Session.
Creo mi problema viene de la mezcla de javascript (código cliente) con ASP (código servidor).

Tambien estoy tratando de pasar por URL la variable idioma para así hacer el cambio de idioma en la página ejemplo.asp.

Código ASP:
Ver original
  1. <script type="text/javascript">
  2.     function SetLanguage(idioma)
  3.     {
  4.         switch (idioma)
  5.         {
  6.             case 'esp':
  7.                 <% session.contents("idioma_usuario") = "esp" %>
  8.                 <!--#include file='lang_esp.asp'-->
  9.                         break;
  10.             case 'en':
  11.                 <% session.contents("idioma_usuario") = "en" %>
  12.             break;
  13.                         case 'fr':
  14.                 <% session.contents("idioma_usuario") = "fr" %>
  15.             break; 
  16.         }
  17.     }
  18. </script>
  19.  
  20. <ul id="idiomas">
  21.         <li id="esp"><a href="ejemplo.asp?lang=<%= Session("idioma_usuario")%>" onclick="<% session.contents("idioma_usuario") = "esp" %>">ESP</a></li>
  22.     <li id="eng"><a href="ejemplo.asp?lang=<%= Session("idioma_usuario")%>" onClick="<% session.contents("idioma_usuario") = "en" %>">ENG</a></li>
  23.     <li id="fr"><a href="ejemplo.asp" onclick="SetLanguage('fr')">FRA</a></li>
  24. </ul>

Y finalmente al dar click a cualquier enlace de los idiomas, debería marcar el tag del idioma seleccionado con la clase active. Esto he visto que al hacer postback no me está guardando dicha clase.

¿Alguna sugerencia? Voy a seguir leyendo. Gracias

Última edición por red_robe; 26/02/2013 a las 06:24
  #5 (permalink)  
Antiguo 26/02/2013, 12:36
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

Cuando haces click en el link, la página se recarga, no estás llamando a tu función JavaScript. Lo que tienes que hacer es establecer tus valores en el servidor y no en el cliente, para lo cual tienes que crear esa función en VBS.

No veo donde estés haciendo un "postback" que técnicamente es envíar un formulario al mismo archivo por post, en este caso no hay nada similar, tampoco veo ninguna clase, no se si estarás confundiendo conceptos de ASP.NET.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 27/02/2013, 10:51
 
Fecha de Ingreso: febrero-2006
Mensajes: 233
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

solucionado! despues de mucho leer, ya he conseguido hacer andar los idiomas. Este enlace, aun siendo antiguo (¿y quizás ya obsoleto?), me ha ido muy bien.

para mantener la misma URL en el momento que el user cambia el idioma, hago uso de request.ServerVariables("URL") ya que la opción de selector #top?idioma="XX" no funciona.
Código ASP:
Ver original
  1. <li id="english"><a href="<%=request.ServerVariables("URL")%>?idioma=en">ENG</a></li>
pero el problema es que en cualquier enlace interno de la web tengo que pasar en la URL el idioma actual (sería como el GET en PHP). ¿Cómo podría en ASP esconder de la ruta el ...?idioma=es ?
Código ASP:
Ver original
  1. <a href="actualidad.asp?idioma=<%=Session("lengua")%>">Actualidad</a>
(guardo el idioma actual en sesion con la variable Session("lengua").

el segundo problema que tengo es que uso selectores con jQuery para cargar nuevas zonas de la web tipo
Código ASP:
Ver original
  1. /actualidad.asp?idioma=eng#noticia3
si el usuario cambia el idioma, la variable request.ServerVariables("URL") solo devuelve /actualidad.asp, por lo que el selector (#noticia3) se pierde. No puedo mezlar código javascript con asp ya que trabajan en client - server. ¿Qué opción tengo?

por otra parte, ¿mejor usar ficheros con extensiones .asp antes que .inc? tipo para header, footer, menú, etc. sólo he leído que .asp es más seguro que .inc en caso de integrar código asp.

Gracias!!!

Última edición por red_robe; 27/02/2013 a las 11:00
  #7 (permalink)  
Antiguo 05/03/2013, 16:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 233
Antigüedad: 18 años, 2 meses
Puntos: 3
Respuesta: problema constantes repetidas en ficheros de idiomas (Name redefined)

hola, sigo teniendo el problema que comento arriba.

a parte, tengo unos productos que solo se tienen que mostrar en la web en inglés, no en español. mezclando asp con html no resulta:

dentro de un archivo asp:
Código ASP:
Ver original
  1. <% if (Session("lengua") == en)
  2. {
  3. %>
  4.     <div id="producto_ingles">Debería aparecer solo en inglés</div>
  5. <% } %>

Y tambien intenté asignar el nombre de la variable sesión de idioma como id o class de un div y en el css decidir si mostrar o no dicho div
Código ASP:
Ver original
  1. <div id="<%= Session("lengua") %>">...</div>

segun las explicaciones de u_goldman, deduzco que debo pasar este código a VBS, y ahi definir el div?
Gracias!

Etiquetas: asp, aspx-(.net), constantes, ficheros, idiomas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:33.