Traducción aplicación ASP

14/05/2004 - 11:19 por Verónica | Informe spam
Hola a todos:

Tengo una aplicación hecha en ASP con acceso a una base de
datos. Tengo que tener la aplicación en multiidioma. Es
decir, que un usuario pueda elegir verlo en español o en
inglés, o en otro idioma. Me gustaría saber cuál sería la
mejor forma y la menos tediosa. Solo se tiene que ver en
otro idioma los textos de las etiquetas, los botones,...
Lo que sale de la base de datos, se vería tal y como sale.
Lo que no quiero es tener que duplicar las páginas. Y
quiero que la aplicación no se ralentice.

Gracias.

Verónica

Preguntas similare

Leer las respuestas

#6 Carlos Badinieres
20/05/2004 - 18:42 | Informe spam
Carlos:

Esta muy bien el codigo que enviaste y yo estoy intentando hacer lo mismo en
una aplicación que funciona con ASP y Access, la preguta es:

Si tengo una página que tenga digamos 50 etiquetas que traducir (por cada
pagina ASP desplegada) o buscar en la base de datos para desplegar en el
idioma solicitado, este codigo hará 50 accesos a la base de datos para traer
los mensajes ¿No afecta esto al rendimiento de mi aplicación? Si tengo 1000
personas accesando de manera simultánea a esta página/sitio ¿No se va
saturar el servidor?, ¿Has hecho pruebas con este tipo de codigo? ¿Como es
su rendimiento?

Perdon por tantas preguntas, pero prefiero creo que la experiencia de
alguien que ya ha hecho algo semejante es mejor que hacer el codigo y
"esperar" que funcione como es debido.

Gracias,

Carlos

"Carlos Rojas" wrote in message
news:
crea una tabla "Mensajes" con tres campos
IdTexto
idIdioma
Texto

lo que tendrias que hacer es llenarla de esta forma:
1 , "ES", "HOLA"
1 , "EN", "HELLO"
2, "ES", "Enviar"
2, "EN", "Submit"

en un archivo mensajes.asp defines la siguiente función
function texto(Numero, Idioma)
set MiConexion=server.createobject("adodb.connection")
MiConexion.open "Cadena"
set rsMensaje= MiConexion.execute("select texto from Mensajes where
idtexto="&Numero&" and idIdioma='"&Idioma&"'")
texto= rsMensaje("Texto")
end functio

en alguna pagina debes permitir cambiar el idioma que se esta usando:
<form name ="idioma" action="cambiaridioma.asp">
<select name="idioma">
<option value="ES">Español</option>
<option value="EN">Ingles</option>
</select>
</form>

la fuente para cambiaridioma.asp sería asi:

session("idioma")=request.form("idioma")
response.redirect("algunapagina.asp")
'con las variables de servidor trata de
'detectar de que pagina proviene para
'que muestres la pagina con la nueva configuracion.


en la pagina asp donde necesitas poner los mensaje tienes que hacer esto
<!--#include file="mensajes.asp"-->
<form name="Formulario" action="otrapagina.asp">
<input type="submit" value="<%=texto(2,session("idioma"))%>">
</form>

El problema esta que todos los textos de todos los idiomas los tienes que
traducir y meter dentro de la tabla mensajes.

una ultima cosa esto lo he escrito directamente en el lector de noticias ,
asi que tendras que probarlo primero, pero veo que se entiende la idea.

Si tienes alguna duda enviame un email quita


NOSPAM

Saludos
Carlos Rojas




"Verónica" escribió en el mensaje
news:d1f601c43994$80d87930$
Hola a todos:

Tengo una aplicación hecha en ASP con acceso a una base de
datos. Tengo que tener la aplicación en multiidioma. Es
decir, que un usuario pueda elegir verlo en español o en
inglés, o en otro idioma. Me gustaría saber cuál sería la
mejor forma y la menos tediosa. Solo se tiene que ver en
otro idioma los textos de las etiquetas, los botones,...
Lo que sale de la base de datos, se vería tal y como sale.
Lo que no quiero es tener que duplicar las páginas. Y
quiero que la aplicación no se ralentice.

Gracias.

Verónica


Respuesta Responder a este mensaje
#7 Carlos Rojas
20/05/2004 - 19:58 | Informe spam
no hay poroblema por las preguntas, para eso esta el foro, mi recomendacion
es que agreges un indice que contenga las columnas IdTexto y idIdioma con
esto ayudas muchisimo a las consultas, lo segundo que hacerlo en access para
una cantidad tan grande de personas pues no creo que sea la mejor salida
talvez debas cambiar a una base de datos sqlserver o a tablas de VisualFox
con indices para la integridad referencia y tambien para las consultas, el
criterio que tengo es que si es una empresa que no puede afrontar el costo
de sqlserver pues que elija tablas en fox que segun mi experiencia son muy
buenas y gratis, el punto flaco de las bases fox es que no maneja seguridad,
pero eso es un problema cuando se trabaja en entorno de red local y las pc
tienen acceso directo a la base de datos, pero en un servidor web
francamente yo lo veo como una muy buena opción

sobre la cantidad de consultas a la base de datos estas en lo correcto asi
que creo que se podria mejorar asiendo lo siguiente
el diseño de la tabla mensaje sería

IdPagina
idIdioma
IdTexto
Texto

*ahora el indice deberá contener idpagina , idioma
luego todos los textos se almacenan en un arreglo

<%
dim arreglo()
nPagina=1
cIdioma=session("idioma") ' vean los post anteriores
set rs.execute("select * from mensaje where idPagina= "&nPagina&" and
idioma='"&cIdioma&"' order by idtexto")
i=1
do untilrs.eof
arreglo(i)=rs("texto")
redim arreglo(i+1) preserve ' esto no se si estará bien pero la idea es
incrementar el tamaño del array
i=i+1
loop
%>
luego para poner los mensajes sería algo asi
<input type="submit" value="<%=arreglo(7)%>">

pongo 7 como ejemplo en cada caso se deberá ver que indice dentro del array
le corresponde a cada texto.

bueno. muchas gracias a mi tocayo.
Me haz dado una gran idea.

Saludos


"Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
news:
Carlos:

Esta muy bien el codigo que enviaste y yo estoy intentando hacer lo mismo


en
una aplicación que funciona con ASP y Access, la preguta es:

Si tengo una página que tenga digamos 50 etiquetas que traducir (por cada
pagina ASP desplegada) o buscar en la base de datos para desplegar en el
idioma solicitado, este codigo hará 50 accesos a la base de datos para


traer
los mensajes ¿No afecta esto al rendimiento de mi aplicación? Si tengo


1000
personas accesando de manera simultánea a esta página/sitio ¿No se va
saturar el servidor?, ¿Has hecho pruebas con este tipo de codigo? ¿Como es
su rendimiento?

Perdon por tantas preguntas, pero prefiero creo que la experiencia de
alguien que ya ha hecho algo semejante es mejor que hacer el codigo y
"esperar" que funcione como es debido.

Gracias,

Carlos

"Carlos Rojas" wrote in message
news:
> crea una tabla "Mensajes" con tres campos
> IdTexto
> idIdioma
> Texto
>
> lo que tendrias que hacer es llenarla de esta forma:
> 1 , "ES", "HOLA"
> 1 , "EN", "HELLO"
> 2, "ES", "Enviar"
> 2, "EN", "Submit"
>
> en un archivo mensajes.asp defines la siguiente función
> function texto(Numero, Idioma)
> set MiConexion=server.createobject("adodb.connection")
> MiConexion.open "Cadena"
> set rsMensaje= MiConexion.execute("select texto from Mensajes where
> idtexto="&Numero&" and idIdioma='"&Idioma&"'")
> texto= rsMensaje("Texto")
> end functio
>
> en alguna pagina debes permitir cambiar el idioma que se esta usando:
> <form name ="idioma" action="cambiaridioma.asp">
> <select name="idioma">
> <option value="ES">Español</option>
> <option value="EN">Ingles</option>
> </select>
> </form>
>
> la fuente para cambiaridioma.asp sería asi:
>
> session("idioma")=request.form("idioma")
> response.redirect("algunapagina.asp")
> 'con las variables de servidor trata de
> 'detectar de que pagina proviene para
> 'que muestres la pagina con la nueva configuracion.
>
>
> en la pagina asp donde necesitas poner los mensaje tienes que hacer esto
> <!--#include file="mensajes.asp"-->
> <form name="Formulario" action="otrapagina.asp">
> <input type="submit" value="<%=texto(2,session("idioma"))%>">
> </form>
>
> El problema esta que todos los textos de todos los idiomas los tienes


que
> traducir y meter dentro de la tabla mensajes.
>
> una ultima cosa esto lo he escrito directamente en el lector de noticias


,
> asi que tendras que probarlo primero, pero veo que se entiende la idea.
>
> Si tienes alguna duda enviame un email quita
NOSPAM
>
> Saludos
> Carlos Rojas
>
>
>
>
> "Verónica" escribió en el mensaje
> news:d1f601c43994$80d87930$
> Hola a todos:
>
> Tengo una aplicación hecha en ASP con acceso a una base de
> datos. Tengo que tener la aplicación en multiidioma. Es
> decir, que un usuario pueda elegir verlo en español o en
> inglés, o en otro idioma. Me gustaría saber cuál sería la
> mejor forma y la menos tediosa. Solo se tiene que ver en
> otro idioma los textos de las etiquetas, los botones,...
> Lo que sale de la base de datos, se vería tal y como sale.
> Lo que no quiero es tener que duplicar las páginas. Y
> quiero que la aplicación no se ralentice.
>
> Gracias.
>
> Verónica
>
>


Respuesta Responder a este mensaje
#8 Carlos Badinieres
20/05/2004 - 20:45 | Informe spam
Carlos:

Se me hace muy interesante esa solución para poder hacer una sola búsqueda
en lugar de 50 o las que sean necesarias, pero ya que estamos metidos en
esto te comento otra idea que se me ha ocurrido.

El problema de indexar estas etiquetas por pagina es que en la base de datos
se tendran muchas etiquetas repetidas ya que en proyectos grandes las
etiquetas de campos y/o mensajes suelen repetirse con mucha frecuencia y es
mejor dar mantenimiento a cada etiqueta una sola vez, sobre todo cuando se
quieren meter varios idiomas.

Por ejemplo, una etiqueta que despliega el mensaje "Nombre" puede ser
repetida en mutliples paginas a lo largo del proyecto, entonces se tiene que
traducir muchas veces, yo sugiero hacer lo siguiente:

Hacer la estructura de la tabla de la siguiente manera:

Etiquetas
-
id_etiqueta
id_idioma
texto

Hacer un arreglo de las etiquetas que se desea traer en cada pagina.
Etiquetas = "34,36,38,450,650,954, 45, 67, 90"

Despues con un split sacamos las diferentes variables y las metemos en una
secuencia de SQL para que aparezca algo asi:

Sacamos el valor del idioma desde una tabla de configuración o desde las
preferencias del usuario y lo almacenamos en una variable para meterlo en la
secuencia de SQL y luego armamos el codigo de busqueda.

SELECT id_etiqueta, texto FROM Etiquetas WHERE id_idioma = "ES" AND
(id_etiqueta = 34 OR id_etiqueta = 36..etc)

Asi ya tenemos todas las etiquetas y las metemos en un arreglo y conforme
las vayamos necesitando se va llamando la funcion para traer el valor del
arreglo con respecto al valor que se necesita y listo.

Asi cada etiqueta solo se traduce una sola vez (claro que hay que poner el
campo "texto" en la base de datos como unico) y se puede hacer la traducción
de un sitio de manera mas eficiente.

Claro que si el proyecto no es tan grande con el codigo que envías sería
suficiente, pero el proyecto que estoy poniendo con multilenguaje es
necesario evitar la traducción repetitiva de etiquetas.

Saludos,

Carlos

"Carlos Rojas" wrote in message
news:
no hay poroblema por las preguntas, para eso esta el foro, mi


recomendacion
es que agreges un indice que contenga las columnas IdTexto y idIdioma con
esto ayudas muchisimo a las consultas, lo segundo que hacerlo en access


para
una cantidad tan grande de personas pues no creo que sea la mejor salida
talvez debas cambiar a una base de datos sqlserver o a tablas de VisualFox
con indices para la integridad referencia y tambien para las consultas, el
criterio que tengo es que si es una empresa que no puede afrontar el costo
de sqlserver pues que elija tablas en fox que segun mi experiencia son muy
buenas y gratis, el punto flaco de las bases fox es que no maneja


seguridad,
pero eso es un problema cuando se trabaja en entorno de red local y las pc
tienen acceso directo a la base de datos, pero en un servidor web
francamente yo lo veo como una muy buena opción

sobre la cantidad de consultas a la base de datos estas en lo correcto asi
que creo que se podria mejorar asiendo lo siguiente
el diseño de la tabla mensaje sería

IdPagina
idIdioma
IdTexto
Texto

*ahora el indice deberá contener idpagina , idioma
luego todos los textos se almacenan en un arreglo

<%
dim arreglo()
nPagina=1
cIdioma=session("idioma") ' vean los post anteriores
set rs.execute("select * from mensaje where idPagina= "&nPagina&" and
idioma='"&cIdioma&"' order by idtexto")
i=1
do untilrs.eof
arreglo(i)=rs("texto")
redim arreglo(i+1) preserve ' esto no se si estará bien pero la idea


es
incrementar el tamaño del array
i=i+1
loop
%>
luego para poner los mensajes sería algo asi
<input type="submit" value="<%=arreglo(7)%>">

pongo 7 como ejemplo en cada caso se deberá ver que indice dentro del


array
le corresponde a cada texto.

bueno. muchas gracias a mi tocayo.
Me haz dado una gran idea.

Saludos


"Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
news:
> Carlos:
>
> Esta muy bien el codigo que enviaste y yo estoy intentando hacer lo


mismo
en
> una aplicación que funciona con ASP y Access, la preguta es:
>
> Si tengo una página que tenga digamos 50 etiquetas que traducir (por


cada
> pagina ASP desplegada) o buscar en la base de datos para desplegar en el
> idioma solicitado, este codigo hará 50 accesos a la base de datos para
traer
> los mensajes ¿No afecta esto al rendimiento de mi aplicación? Si tengo
1000
> personas accesando de manera simultánea a esta página/sitio ¿No se va
> saturar el servidor?, ¿Has hecho pruebas con este tipo de codigo? ¿Como


es
> su rendimiento?
>
> Perdon por tantas preguntas, pero prefiero creo que la experiencia de
> alguien que ya ha hecho algo semejante es mejor que hacer el codigo y
> "esperar" que funcione como es debido.
>
> Gracias,
>
> Carlos
>
> "Carlos Rojas" wrote in message
> news:
> > crea una tabla "Mensajes" con tres campos
> > IdTexto
> > idIdioma
> > Texto
> >
> > lo que tendrias que hacer es llenarla de esta forma:
> > 1 , "ES", "HOLA"
> > 1 , "EN", "HELLO"
> > 2, "ES", "Enviar"
> > 2, "EN", "Submit"
> >
> > en un archivo mensajes.asp defines la siguiente función
> > function texto(Numero, Idioma)
> > set MiConexion=server.createobject("adodb.connection")
> > MiConexion.open "Cadena"
> > set rsMensaje= MiConexion.execute("select texto from Mensajes


where
> > idtexto="&Numero&" and idIdioma='"&Idioma&"'")
> > texto= rsMensaje("Texto")
> > end functio
> >
> > en alguna pagina debes permitir cambiar el idioma que se esta usando:
> > <form name ="idioma" action="cambiaridioma.asp">
> > <select name="idioma">
> > <option value="ES">Español</option>
> > <option value="EN">Ingles</option>
> > </select>
> > </form>
> >
> > la fuente para cambiaridioma.asp sería asi:
> >
> > session("idioma")=request.form("idioma")
> > response.redirect("algunapagina.asp")
> > 'con las variables de servidor trata de
> > 'detectar de que pagina proviene para
> > 'que muestres la pagina con la nueva configuracion.
> >
> >
> > en la pagina asp donde necesitas poner los mensaje tienes que hacer


esto
> > <!--#include file="mensajes.asp"-->
> > <form name="Formulario" action="otrapagina.asp">
> > <input type="submit" value="<%=texto(2,session("idioma"))%>">
> > </form>
> >
> > El problema esta que todos los textos de todos los idiomas los tienes
que
> > traducir y meter dentro de la tabla mensajes.
> >
> > una ultima cosa esto lo he escrito directamente en el lector de


noticias
,
> > asi que tendras que probarlo primero, pero veo que se entiende la


idea.
> >
> > Si tienes alguna duda enviame un email quita
> NOSPAM
> >
> > Saludos
> > Carlos Rojas
> >
> >
> >
> >
> > "Verónica" escribió en el


mensaje
> > news:d1f601c43994$80d87930$
> > Hola a todos:
> >
> > Tengo una aplicación hecha en ASP con acceso a una base de
> > datos. Tengo que tener la aplicación en multiidioma. Es
> > decir, que un usuario pueda elegir verlo en español o en
> > inglés, o en otro idioma. Me gustaría saber cuál sería la
> > mejor forma y la menos tediosa. Solo se tiene que ver en
> > otro idioma los textos de las etiquetas, los botones,...
> > Lo que sale de la base de datos, se vería tal y como sale.
> > Lo que no quiero es tener que duplicar las páginas. Y
> > quiero que la aplicación no se ralentice.
> >
> > Gracias.
> >
> > Verónica
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Carlos Rojas
21/05/2004 - 05:13 | Informe spam
ok, la solucion la veo en normalizar los datos ... bueno terminé de
normalizarlos ahi va:

Tabla:Idioma
Campos:
-IdIdioma*
-Nombre

Tabla:Mensaje
Campos:
-IdMensaje*
-Texto

Tabla:Traduccion
Campos:
-IdIdioma* (f)
-IdMensaje* (f)
-Texto

Tabla:PaginaMensaje
Campos:
-IdPagina*
-IdMensaje* (f)

Leyenda:
* = miembro de la llave primaria
(*) = llave foranea


En un diagrama ER seria así

Idioma +<Traduccion>--+Mensaje+-<PaginaMensaje

Leyenda:
+ = uno
< = muchos
= muchos



mas o menos la interpretacion sería asi:
Un idioma tiene varios mensajes traducidos, este mensaje traducido proviene
de un mensaje (en español) y este mensaje es utilizado en muchas páginas.

un ejemplo con algo de datos:

idioma
IdIdioma Nombre
IN Ingles
FR Frances
... y asi (Español no va por que los mensajes en español van en la tabla
mensaje)

Mensaje
IdMensaje Texto
1 Bienvenido
2 Enviar
3 Salir
el texto puede ser muy muy largo


Traduccion
IdIdioma IdMensaje Texto
IN 1 Welcome
IN 2 Send
IN 3 Quit
FR 1 Bienvenue
FR 2 Envoyer
FR 3 Partir
Gracias a google por la herramienta de traduccion :-)

PaginaMensaje
IdPagina IdMensaje
index 1
index 2
Salida 3


ahora el codigo :
babilonia.asp
<%
'asumo que existe una conexion a la base de datos y que se llama con, ademas
que
'en la variable session("idioma") esta el id del idioma que ha seleccionado
el visitante
dim tex()
function bab(pagina)
if session("idioma")="ES" then
sCadena= _
"select Mensaje.IdMensaje, mensaje.Texto " & _
"from Mensaje, PaginaMensaje " & _
"where PaginaMensaje.IdMensaje=Mensaje.IdMensaje "& _
" and PaginaMensaje.idPagina='"&pagina&"' "& _
"order by Mensaje.IdMensaje;"
else
sCadena= _
"select traduccion.idmensaje, traduccion.texto " & _
" from Traduccion, PaginaMensaje " & _
"where PaginaMensaje.IdMensaje=Traduccion.IdMensaje and " & _
" PaginaMensaje.IdPagina='"&pagina&"' and " & _
" Traduccion.IdIdioma='"&session("idioma")&"' " & _
"order by traduccion.idmensaje;"
end if
set rs=con.execute(sCadena)
i=1
do until rs.eof
redim txt(i) preserve
txt(i)=rs("Texto")
i=i+1
rs.movenext
loop
rs.close
set rs=nothing
end function
%>

Una pagina de ejemplo index.asp:
<%@ Language=VBScript %>
<!--#include file="babilonia.asp"-->
<%
bab
session("idioma")="IN"
%>
<form action="otrapag.asp">
<input type="submit" value="<%=tex(2)%>">
</form>

Listo.
espero alguien lo use y lo depure, disculpas por algun error de sintaxis lo
he escrito de memoria.

Saludos
Carlos Rojas


"Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
news:
Carlos:

Se me hace muy interesante esa solución para poder hacer una sola búsqueda
en lugar de 50 o las que sean necesarias, pero ya que estamos metidos en
esto te comento otra idea que se me ha ocurrido.

El problema de indexar estas etiquetas por pagina es que en la base de


datos
se tendran muchas etiquetas repetidas ya que en proyectos grandes las
etiquetas de campos y/o mensajes suelen repetirse con mucha frecuencia y


es
mejor dar mantenimiento a cada etiqueta una sola vez, sobre todo cuando se
quieren meter varios idiomas.

Por ejemplo, una etiqueta que despliega el mensaje "Nombre" puede ser
repetida en mutliples paginas a lo largo del proyecto, entonces se tiene


que
traducir muchas veces, yo sugiero hacer lo siguiente:

Hacer la estructura de la tabla de la siguiente manera:

Etiquetas
-
id_etiqueta
id_idioma
texto

Hacer un arreglo de las etiquetas que se desea traer en cada pagina.
Etiquetas = "34,36,38,450,650,954, 45, 67, 90"

Despues con un split sacamos las diferentes variables y las metemos en una
secuencia de SQL para que aparezca algo asi:

Sacamos el valor del idioma desde una tabla de configuración o desde las
preferencias del usuario y lo almacenamos en una variable para meterlo en


la
secuencia de SQL y luego armamos el codigo de busqueda.

SELECT id_etiqueta, texto FROM Etiquetas WHERE id_idioma = "ES" AND
(id_etiqueta = 34 OR id_etiqueta = 36..etc)

Asi ya tenemos todas las etiquetas y las metemos en un arreglo y conforme
las vayamos necesitando se va llamando la funcion para traer el valor del
arreglo con respecto al valor que se necesita y listo.

Asi cada etiqueta solo se traduce una sola vez (claro que hay que poner el
campo "texto" en la base de datos como unico) y se puede hacer la


traducción
de un sitio de manera mas eficiente.

Claro que si el proyecto no es tan grande con el codigo que envías sería
suficiente, pero el proyecto que estoy poniendo con multilenguaje es
necesario evitar la traducción repetitiva de etiquetas.

Saludos,

Carlos

"Carlos Rojas" wrote in message
news:
> no hay poroblema por las preguntas, para eso esta el foro, mi
recomendacion
> es que agreges un indice que contenga las columnas IdTexto y idIdioma


con
> esto ayudas muchisimo a las consultas, lo segundo que hacerlo en access
para
> una cantidad tan grande de personas pues no creo que sea la mejor salida
> talvez debas cambiar a una base de datos sqlserver o a tablas de


VisualFox
> con indices para la integridad referencia y tambien para las consultas,


el
> criterio que tengo es que si es una empresa que no puede afrontar el


costo
> de sqlserver pues que elija tablas en fox que segun mi experiencia son


muy
> buenas y gratis, el punto flaco de las bases fox es que no maneja
seguridad,
> pero eso es un problema cuando se trabaja en entorno de red local y las


pc
> tienen acceso directo a la base de datos, pero en un servidor web
> francamente yo lo veo como una muy buena opción
>
> sobre la cantidad de consultas a la base de datos estas en lo correcto


asi
> que creo que se podria mejorar asiendo lo siguiente
> el diseño de la tabla mensaje sería
>
> IdPagina
> idIdioma
> IdTexto
> Texto
>
> *ahora el indice deberá contener idpagina , idioma
> luego todos los textos se almacenan en un arreglo
>
> <%
> dim arreglo()
> nPagina=1
> cIdioma=session("idioma") ' vean los post anteriores
> set rs.execute("select * from mensaje where idPagina= "&nPagina&" and
> idioma='"&cIdioma&"' order by idtexto")
> i=1
> do untilrs.eof
> arreglo(i)=rs("texto")
> redim arreglo(i+1) preserve ' esto no se si estará bien pero la idea
es
> incrementar el tamaño del array
> i=i+1
> loop
> %>
> luego para poner los mensajes sería algo asi
> <input type="submit" value="<%=arreglo(7)%>">
>
> pongo 7 como ejemplo en cada caso se deberá ver que indice dentro del
array
> le corresponde a cada texto.
>
> bueno. muchas gracias a mi tocayo.
> Me haz dado una gran idea.
>
> Saludos
>
>
> "Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
> news:
> > Carlos:
> >
> > Esta muy bien el codigo que enviaste y yo estoy intentando hacer lo
mismo
> en
> > una aplicación que funciona con ASP y Access, la preguta es:
> >
> > Si tengo una página que tenga digamos 50 etiquetas que traducir (por
cada
> > pagina ASP desplegada) o buscar en la base de datos para desplegar en


el
> > idioma solicitado, este codigo hará 50 accesos a la base de datos para
> traer
> > los mensajes ¿No afecta esto al rendimiento de mi aplicación? Si tengo
> 1000
> > personas accesando de manera simultánea a esta página/sitio ¿No se va
> > saturar el servidor?, ¿Has hecho pruebas con este tipo de codigo?


¿Como
es
> > su rendimiento?
> >
> > Perdon por tantas preguntas, pero prefiero creo que la experiencia de
> > alguien que ya ha hecho algo semejante es mejor que hacer el codigo y
> > "esperar" que funcione como es debido.
> >
> > Gracias,
> >
> > Carlos
> >
> > "Carlos Rojas" wrote in message
> > news:
> > > crea una tabla "Mensajes" con tres campos
> > > IdTexto
> > > idIdioma
> > > Texto
> > >
> > > lo que tendrias que hacer es llenarla de esta forma:
> > > 1 , "ES", "HOLA"
> > > 1 , "EN", "HELLO"
> > > 2, "ES", "Enviar"
> > > 2, "EN", "Submit"
> > >
> > > en un archivo mensajes.asp defines la siguiente función
> > > function texto(Numero, Idioma)
> > > set MiConexion=server.createobject("adodb.connection")
> > > MiConexion.open "Cadena"
> > > set rsMensaje= MiConexion.execute("select texto from Mensajes
where
> > > idtexto="&Numero&" and idIdioma='"&Idioma&"'")
> > > texto= rsMensaje("Texto")
> > > end functio
> > >
> > > en alguna pagina debes permitir cambiar el idioma que se esta


usando:
> > > <form name ="idioma" action="cambiaridioma.asp">
> > > <select name="idioma">
> > > <option value="ES">Español</option>
> > > <option value="EN">Ingles</option>
> > > </select>
> > > </form>
> > >
> > > la fuente para cambiaridioma.asp sería asi:
> > >
> > > session("idioma")=request.form("idioma")
> > > response.redirect("algunapagina.asp")
> > > 'con las variables de servidor trata de
> > > 'detectar de que pagina proviene para
> > > 'que muestres la pagina con la nueva configuracion.
> > >
> > >
> > > en la pagina asp donde necesitas poner los mensaje tienes que hacer
esto
> > > <!--#include file="mensajes.asp"-->
> > > <form name="Formulario" action="otrapagina.asp">
> > > <input type="submit" value="<%=texto(2,session("idioma"))%>">
> > > </form>
> > >
> > > El problema esta que todos los textos de todos los idiomas los


tienes
> que
> > > traducir y meter dentro de la tabla mensajes.
> > >
> > > una ultima cosa esto lo he escrito directamente en el lector de
noticias
> ,
> > > asi que tendras que probarlo primero, pero veo que se entiende la
idea.
> > >
> > > Si tienes alguna duda enviame un email quita
> > NOSPAM
> > >
> > > Saludos
> > > Carlos Rojas
> > >
> > >
> > >
> > >
> > > "Verónica" escribió en el
mensaje
> > > news:d1f601c43994$80d87930$
> > > Hola a todos:
> > >
> > > Tengo una aplicación hecha en ASP con acceso a una base de
> > > datos. Tengo que tener la aplicación en multiidioma. Es
> > > decir, que un usuario pueda elegir verlo en español o en
> > > inglés, o en otro idioma. Me gustaría saber cuál sería la
> > > mejor forma y la menos tediosa. Solo se tiene que ver en
> > > otro idioma los textos de las etiquetas, los botones,...
> > > Lo que sale de la base de datos, se vería tal y como sale.
> > > Lo que no quiero es tener que duplicar las páginas. Y
> > > quiero que la aplicación no se ralentice.
> > >
> > > Gracias.
> > >
> > > Verónica
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#10 Carlos Bladinieres
21/05/2004 - 07:34 | Informe spam
Carlos:

Voy a trabajar en esa solucion que propones y en cuanto tenga algo listo te
envio la liga para que veas la aplicacion resultante.
Gracias por la ayuda.

Saludos,

Carlos
MEXICO

"Carlos Rojas" wrote in message
news:%
ok, la solucion la veo en normalizar los datos ... bueno terminé de
normalizarlos ahi va:

Tabla:Idioma
Campos:
-IdIdioma*
-Nombre

Tabla:Mensaje
Campos:
-IdMensaje*
-Texto

Tabla:Traduccion
Campos:
-IdIdioma* (f)
-IdMensaje* (f)
-Texto

Tabla:PaginaMensaje
Campos:
-IdPagina*
-IdMensaje* (f)

Leyenda:
* = miembro de la llave primaria
(*) = llave foranea


En un diagrama ER seria así

Idioma +<Traduccion>--+Mensaje+-<PaginaMensaje

Leyenda:
+ = uno
< = muchos
> = muchos

mas o menos la interpretacion sería asi:
Un idioma tiene varios mensajes traducidos, este mensaje traducido


proviene
de un mensaje (en español) y este mensaje es utilizado en muchas páginas.

un ejemplo con algo de datos:

idioma
IdIdioma Nombre
IN Ingles
FR Frances
... y asi (Español no va por que los mensajes en español van en la tabla
mensaje)

Mensaje
IdMensaje Texto
1 Bienvenido
2 Enviar
3 Salir
el texto puede ser muy muy largo


Traduccion
IdIdioma IdMensaje Texto
IN 1 Welcome
IN 2 Send
IN 3 Quit
FR 1 Bienvenue
FR 2 Envoyer
FR 3 Partir
Gracias a google por la herramienta de traduccion :-)

PaginaMensaje
IdPagina IdMensaje
index 1
index 2
Salida 3


ahora el codigo :
babilonia.asp
<%
'asumo que existe una conexion a la base de datos y que se llama con,


ademas
que
'en la variable session("idioma") esta el id del idioma que ha


seleccionado
el visitante
dim tex()
function bab(pagina)
if session("idioma")="ES" then
sCadena= _
"select Mensaje.IdMensaje, mensaje.Texto " & _
"from Mensaje, PaginaMensaje " & _
"where PaginaMensaje.IdMensaje=Mensaje.IdMensaje "& _
" and PaginaMensaje.idPagina='"&pagina&"' "& _
"order by Mensaje.IdMensaje;"
else
sCadena= _
"select traduccion.idmensaje, traduccion.texto " & _
" from Traduccion, PaginaMensaje " & _
"where PaginaMensaje.IdMensaje=Traduccion.IdMensaje and " & _
" PaginaMensaje.IdPagina='"&pagina&"' and " & _
" Traduccion.IdIdioma='"&session("idioma")&"' " & _
"order by traduccion.idmensaje;"
end if
set rs=con.execute(sCadena)
i=1
do until rs.eof
redim txt(i) preserve
txt(i)=rs("Texto")
i=i+1
rs.movenext
loop
rs.close
set rs=nothing
end function
%>

Una pagina de ejemplo index.asp:
<%@ Language=VBScript %>
<!--#include file="babilonia.asp"-->
<%
bab
session("idioma")="IN"
%>
<form action="otrapag.asp">
<input type="submit" value="<%=tex(2)%>">
</form>

Listo.
espero alguien lo use y lo depure, disculpas por algun error de sintaxis


lo
he escrito de memoria.

Saludos
Carlos Rojas


"Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
news:
> Carlos:
>
> Se me hace muy interesante esa solución para poder hacer una sola


búsqueda
> en lugar de 50 o las que sean necesarias, pero ya que estamos metidos en
> esto te comento otra idea que se me ha ocurrido.
>
> El problema de indexar estas etiquetas por pagina es que en la base de
datos
> se tendran muchas etiquetas repetidas ya que en proyectos grandes las
> etiquetas de campos y/o mensajes suelen repetirse con mucha frecuencia y
es
> mejor dar mantenimiento a cada etiqueta una sola vez, sobre todo cuando


se
> quieren meter varios idiomas.
>
> Por ejemplo, una etiqueta que despliega el mensaje "Nombre" puede ser
> repetida en mutliples paginas a lo largo del proyecto, entonces se tiene
que
> traducir muchas veces, yo sugiero hacer lo siguiente:
>
> Hacer la estructura de la tabla de la siguiente manera:
>
> Etiquetas
> -
> id_etiqueta
> id_idioma
> texto
>
> Hacer un arreglo de las etiquetas que se desea traer en cada pagina.
> Etiquetas = "34,36,38,450,650,954, 45, 67, 90"
>
> Despues con un split sacamos las diferentes variables y las metemos en


una
> secuencia de SQL para que aparezca algo asi:
>
> Sacamos el valor del idioma desde una tabla de configuración o desde las
> preferencias del usuario y lo almacenamos en una variable para meterlo


en
la
> secuencia de SQL y luego armamos el codigo de busqueda.
>
> SELECT id_etiqueta, texto FROM Etiquetas WHERE id_idioma = "ES" AND
> (id_etiqueta = 34 OR id_etiqueta = 36..etc)
>
> Asi ya tenemos todas las etiquetas y las metemos en un arreglo y


conforme
> las vayamos necesitando se va llamando la funcion para traer el valor


del
> arreglo con respecto al valor que se necesita y listo.
>
> Asi cada etiqueta solo se traduce una sola vez (claro que hay que poner


el
> campo "texto" en la base de datos como unico) y se puede hacer la
traducción
> de un sitio de manera mas eficiente.
>
> Claro que si el proyecto no es tan grande con el codigo que envías sería
> suficiente, pero el proyecto que estoy poniendo con multilenguaje es
> necesario evitar la traducción repetitiva de etiquetas.
>
> Saludos,
>
> Carlos
>
> "Carlos Rojas" wrote in message
> news:
> > no hay poroblema por las preguntas, para eso esta el foro, mi
> recomendacion
> > es que agreges un indice que contenga las columnas IdTexto y idIdioma
con
> > esto ayudas muchisimo a las consultas, lo segundo que hacerlo en


access
> para
> > una cantidad tan grande de personas pues no creo que sea la mejor


salida
> > talvez debas cambiar a una base de datos sqlserver o a tablas de
VisualFox
> > con indices para la integridad referencia y tambien para las


consultas,
el
> > criterio que tengo es que si es una empresa que no puede afrontar el
costo
> > de sqlserver pues que elija tablas en fox que segun mi experiencia son
muy
> > buenas y gratis, el punto flaco de las bases fox es que no maneja
> seguridad,
> > pero eso es un problema cuando se trabaja en entorno de red local y


las
pc
> > tienen acceso directo a la base de datos, pero en un servidor web
> > francamente yo lo veo como una muy buena opción
> >
> > sobre la cantidad de consultas a la base de datos estas en lo correcto
asi
> > que creo que se podria mejorar asiendo lo siguiente
> > el diseño de la tabla mensaje sería
> >
> > IdPagina
> > idIdioma
> > IdTexto
> > Texto
> >
> > *ahora el indice deberá contener idpagina , idioma
> > luego todos los textos se almacenan en un arreglo
> >
> > <%
> > dim arreglo()
> > nPagina=1
> > cIdioma=session("idioma") ' vean los post anteriores
> > set rs.execute("select * from mensaje where idPagina= "&nPagina&" and
> > idioma='"&cIdioma&"' order by idtexto")
> > i=1
> > do untilrs.eof
> > arreglo(i)=rs("texto")
> > redim arreglo(i+1) preserve ' esto no se si estará bien pero la


idea
> es
> > incrementar el tamaño del array
> > i=i+1
> > loop
> > %>
> > luego para poner los mensajes sería algo asi
> > <input type="submit" value="<%=arreglo(7)%>">
> >
> > pongo 7 como ejemplo en cada caso se deberá ver que indice dentro del
> array
> > le corresponde a cada texto.
> >
> > bueno. muchas gracias a mi tocayo.
> > Me haz dado una gran idea.
> >
> > Saludos
> >
> >
> > "Carlos Badinieres" <carlosarrobaxlsopuntocom> escribió en el mensaje
> > news:
> > > Carlos:
> > >
> > > Esta muy bien el codigo que enviaste y yo estoy intentando hacer lo
> mismo
> > en
> > > una aplicación que funciona con ASP y Access, la preguta es:
> > >
> > > Si tengo una página que tenga digamos 50 etiquetas que traducir (por
> cada
> > > pagina ASP desplegada) o buscar en la base de datos para desplegar


en
el
> > > idioma solicitado, este codigo hará 50 accesos a la base de datos


para
> > traer
> > > los mensajes ¿No afecta esto al rendimiento de mi aplicación? Si


tengo
> > 1000
> > > personas accesando de manera simultánea a esta página/sitio ¿No se


va
> > > saturar el servidor?, ¿Has hecho pruebas con este tipo de codigo?
¿Como
> es
> > > su rendimiento?
> > >
> > > Perdon por tantas preguntas, pero prefiero creo que la experiencia


de
> > > alguien que ya ha hecho algo semejante es mejor que hacer el codigo


y
> > > "esperar" que funcione como es debido.
> > >
> > > Gracias,
> > >
> > > Carlos
> > >
> > > "Carlos Rojas" wrote in message
> > > news:
> > > > crea una tabla "Mensajes" con tres campos
> > > > IdTexto
> > > > idIdioma
> > > > Texto
> > > >
> > > > lo que tendrias que hacer es llenarla de esta forma:
> > > > 1 , "ES", "HOLA"
> > > > 1 , "EN", "HELLO"
> > > > 2, "ES", "Enviar"
> > > > 2, "EN", "Submit"
> > > >
> > > > en un archivo mensajes.asp defines la siguiente función
> > > > function texto(Numero, Idioma)
> > > > set MiConexion=server.createobject("adodb.connection")
> > > > MiConexion.open "Cadena"
> > > > set rsMensaje= MiConexion.execute("select texto from Mensajes
> where
> > > > idtexto="&Numero&" and idIdioma='"&Idioma&"'")
> > > > texto= rsMensaje("Texto")
> > > > end functio
> > > >
> > > > en alguna pagina debes permitir cambiar el idioma que se esta
usando:
> > > > <form name ="idioma" action="cambiaridioma.asp">
> > > > <select name="idioma">
> > > > <option value="ES">Español</option>
> > > > <option value="EN">Ingles</option>
> > > > </select>
> > > > </form>
> > > >
> > > > la fuente para cambiaridioma.asp sería asi:
> > > >
> > > > session("idioma")=request.form("idioma")
> > > > response.redirect("algunapagina.asp")
> > > > 'con las variables de servidor trata de
> > > > 'detectar de que pagina proviene para
> > > > 'que muestres la pagina con la nueva configuracion.
> > > >
> > > >
> > > > en la pagina asp donde necesitas poner los mensaje tienes que


hacer
> esto
> > > > <!--#include file="mensajes.asp"-->
> > > > <form name="Formulario" action="otrapagina.asp">
> > > > <input type="submit" value="<%=texto(2,session("idioma"))%>">
> > > > </form>
> > > >
> > > > El problema esta que todos los textos de todos los idiomas los
tienes
> > que
> > > > traducir y meter dentro de la tabla mensajes.
> > > >
> > > > una ultima cosa esto lo he escrito directamente en el lector de
> noticias
> > ,
> > > > asi que tendras que probarlo primero, pero veo que se entiende la
> idea.
> > > >
> > > > Si tienes alguna duda enviame un email


quita
> > > NOSPAM
> > > >
> > > > Saludos
> > > > Carlos Rojas
> > > >
> > > >
> > > >
> > > >
> > > > "Verónica" escribió en el
> mensaje
> > > > news:d1f601c43994$80d87930$
> > > > Hola a todos:
> > > >
> > > > Tengo una aplicación hecha en ASP con acceso a una base de
> > > > datos. Tengo que tener la aplicación en multiidioma. Es
> > > > decir, que un usuario pueda elegir verlo en español o en
> > > > inglés, o en otro idioma. Me gustaría saber cuál sería la
> > > > mejor forma y la menos tediosa. Solo se tiene que ver en
> > > > otro idioma los textos de las etiquetas, los botones,...
> > > > Lo que sale de la base de datos, se vería tal y como sale.
> > > > Lo que no quiero es tener que duplicar las páginas. Y
> > > > quiero que la aplicación no se ralentice.
> > > >
> > > > Gracias.
> > > >
> > > > Verónica
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida