elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Propuestas de mejora a librería de traduccion web
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Propuestas de mejora a librería de traduccion web  (Leído 2,904 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Propuestas de mejora a librería de traduccion web
« en: 28 Junio 2013, 14:46 pm »

Hola gente!
Desde hace un tiempo que estoy pensando en hacer un framework para PHP para traducir sitios webs.
La idea es que, cada vez que el desarrollador quiere mostrar un texto que se tiene que traducir, llame una funcion, la cual buscará la traduccion de texto al idioma del usuario, e imprime ese texto.

Ejemplo:
Código
  1. <?php
  2. echo traducir('Hola Mundo!');
  3.  

Y que el resultado de eso dependa del usuario logueado.

No es dificil ver el idioma predeterminado del usuario, y todo eso... Lo complicado es DONDE GUARDAR los textos traducidos para que la funcion "traducir" los busque.

Lo que veo por todos lados, es algo de este estilo:
Código
  1. <?php
  2.  
  3. $traducciones = array(
  4.       'Hola Mundo!' => array('ingles' => 'Hello World!', 'frances'=>'No tengo ni idea!', 'portugues' => 'Tampo se!');
  5. );
  6.  
  7. function traducir($texto){
  8.       $global $traduccines, IDIOMA_LOCAL;
  9.       return $traducciones[IDIOMA_LOCAL]; //supongamos que IDIOMA_LOCAL es una variable/constante que tiene el idioma del usuario.
  10. }
  11.  

Ahora, los beneficios y las desventajas:
La forma planteada ahí arriba, es muy rapida ya que es acceso directo a un array que estará en memoria, pero el problema está en que cuando en el sitio comienza a haber muchos mas textos, y muy largos, (supongamos mas de 1.000.000 de caracteres), ese array comienza a ser TAN GRANDE que definirlo CADA VEZ que llega un request al servidor, me parece que se va a hacer muy muy poco optimo. Y tampoco puedo definir como CONSTANTE un array, ya que solo acepta valores enteros y strings... Igualmente, si se pudiese definir un array constante, el problema sigue estando.

Que alterntivas hay?
Veo 2 nomas:

* Combinar lo anterior para textos pequeños, fijos, que están en el sitio web, como es el ejemplo de los botones, menúes y demas. Y los textos grandisimos que crecen dinamicamente (supongamos, todos los post de este foro), guardarlos en la base de datos y buscarlos cada vez que hay que mostrarlos.
Esta idea tiene cosas buenas y cosas malas:
Lo bueno, es que se pueden añadir textos grandes de manera "infinita" (o hasta que te reviente el disco duro), y lo MALO es que la velocidad de acceso será LENTA (por tener que acceder a la base de datos), PERO (algo BUENO) siempre será la misma velocidad, estable. Lenta, pero estable.

* Por otro lado está la alternativa de usar MEMCACHE, con ésto se termina el problema de tener que re-definir el array cada vez que llega un request, pero tenemos el problema de que el tamaño limite maximo de texto es CORTO, ya que MEMCACHE utiliza la memoria RAM, y al llenarse la RAM, comienzan los problemas. No conozco mucho MEMCACHE, no se si se puede forzar a que haya variables que jamas se borren, y que al reiniciarse el servidor se auto-carguen nuevamente, y demas. Tampoco conozco mucho el rendimiento cuando se llena la ram. así que esta alternativa queda sin mucha información a causa de la falta de conocimiento de MEMCACHE.

Alguien quiere realizar algun aporte a esta idea?

Saludos!

AÑADO:
Recordar que la idea de realizar traduccinoes con Google Traduct mediante AJAX, no es buena idea, ya que afecta al SEO del sitio web.
Necesitamos que el texto ya llegue traducido al usuario, desde el servidor.

AÑADO:
Otro problema del tema de usar la base de datos, es que tenes que acceder MUCHISIMAS VECES a la base de datos para traer los textos, así que habría que hacer alguna alternativa para traer todos los textos de la DB al inicio y luego acceder a ellos ya en memoria.
Porque? Miren este ejemplo:

Código
  1. <?php
  2. echo 'Un texto de prueba'.$valor_numerico.'Aca otro texto'.$otro_valor.'otra cosita mas';
  3.  

Para algo como eso tendrías que hacer 3 accesos a la DB. Una locura.


« Última modificación: 28 Junio 2013, 15:41 pm por Skeletron » En línea

[Case]


Desconectado Desconectado

Mensajes: 474



Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #1 en: 29 Junio 2013, 07:26 am »

La traducción de texto es un problema muy dificil de resolver, no existe uno lo suficientemente bueno.

Ninguna de tus opciones es buena, por las siguientes razones:

- Tener un arreglo para guardar muchas variables no es para nada practico.
- Las bases de datos existen para resolver los problemas de tener una gran cantidad de información y acceder a ella lo mas rapido posible, por lo tanto su acceso no es muy lento.
Pero para poder "traducir" necesitas una muy buena base de datos, lo cual dudo que tengas.

PD 1: Tal vez Google en su api tiene funciones para hacer eso.
PD 2: En dado caso de que no, AJAX es tu mejor opcion.


En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #2 en: 30 Junio 2013, 05:11 am »

Gracias por tu respuesta.
Algun otro aporte por ahí?

En cuanto al acceso a la DB, prueba tomar el tiempo que tarda en hacerse esto:

<?php
$foo = 2;
$bar = $foo;
?>
Y luego intenta ver cuanto tarda un acceso a datos con una base de datos cualquiera.

Hacer $foo = 2; puede tardar 0.000001 segundo, y un acceso a base de datos puede tardar 0.001, o sea, como 100 veces mas lento.
En línea

[Case]


Desconectado Desconectado

Mensajes: 474



Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #3 en: 30 Junio 2013, 08:56 am »

Eso es una simple asignacion de variables, no veo la comparacion bien.

No se bien como este implementada la funcion array de php, pero un arreglo teorico es un conjunto de memoria "continua" para poder tener un acceso rapido al valor deseado simplemente haciendo una operacion (una multiplicacion).

Obviamente el programa no funcionara cuando intentes hacer arrays inmensos, por que no encontraras memoria continua tan grande.
« Última modificación: 30 Junio 2013, 09:01 am por [Case] » En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #4 en: 1 Julio 2013, 19:48 pm »

En realidad no es tan sencillo como lo planteas.
Tendrías que tener una base de datos donde tengas las tablas de idiomas y palabras relacionadas entre si.

El problema aquí no es le tamaño, sino la traducción correcta del texto.

Tienes que realizar un analizador sintáctico, semántico y morfológico.

Saludos.
En línea

abc
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #5 en: 2 Julio 2013, 13:25 pm »

En realidad no es tan sencillo como lo planteas.
Tendrías que tener una base de datos donde tengas las tablas de idiomas y palabras relacionadas entre si.

El problema aquí no es le tamaño, sino la traducción correcta del texto.

Tienes que realizar un analizador sintáctico, semántico y morfológico.

Saludos.

Darhius,
La traduccion no es problema. Hay herramientas que lo realizan solas.

Y no, no es tan dificil, ya lo he solucionado, y hasta he terminado el framework.

La solución fue:
Guardar todas las palabras traducidas en un tabla MyISAM, con los atributos: "id_frase", "frase", "idioma", y guardar en una tabla MEMMORY de MySQL a las frases mas consultadas.

Los ejemplos serían:

1.Hola.es
1.Hello.en
1.Ciao.it
2.Chau.es
2.Bye.en
2.blabla.it

Ya lo tengo listo. En menos de 1 semana lo publico en GitHUB
En línea

[Case]


Desconectado Desconectado

Mensajes: 474



Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #6 en: 2 Julio 2013, 18:03 pm »

En cuanto lo publiques nos avisas, yo quiero ver como lo solucionaste.
En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #7 en: 2 Julio 2013, 20:11 pm »

Eso no es una frase xD son palabras, eso si es fácil, por ejemplo como traduce esto tu fw?:
Hola, mi nombre es Juan Perez y me gusta programar!

Segun G va así: Hello, my name is Juan Perez and I like programming!

No entendí, en tu framework vas a utilizar herramientas para hacer la traducción?.

O será que tal vez no he comprendido.
Esperamos la publicación  ;)

Saludos.
« Última modificación: 3 Septiembre 2015, 18:38 pm por 1mpuls0 » En línea

abc
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Propuestas de mejora a librería de traduccion web
« Respuesta #8 en: 3 Julio 2013, 13:11 pm »

Exacto. Tengo acceso a la API de pago de Google Transtate, y a otras gratuitas.
Le envío la frase y me responde con la traduccion, segun el idioma que yo quiera.

Tengo mas de 50 idiomas disponibles.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Instrucciones para las propuestas de pruebas.
WarZone
sirdarckcat 0 8,264 Último mensaje 3 Junio 2008, 00:23 am
por sirdarckcat
Propuestas retos, wargame
Desafíos - Wargames
Runex 1 3,293 Último mensaje 9 Mayo 2012, 14:41 pm
por Maedhros
Más propuestas de HP para el universo Windows 8
Noticias
wolfbcn 0 1,338 Último mensaje 20 Septiembre 2012, 21:03 pm
por wolfbcn
Foro para propuestas legislativas
Foro Libre
sombra-fantasma 0 1,515 Último mensaje 6 Junio 2013, 10:34 am
por sombra-fantasma
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines