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
<?php echo traducir('Hola Mundo!');
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
<?php 'Hola Mundo!' => array('ingles' => 'Hello World!', 'frances'=>'No tengo ni idea!', 'portugues' => 'Tampo se!'); ); function traducir($texto){ $global $traduccines, IDIOMA_LOCAL; return $traducciones[IDIOMA_LOCAL]; //supongamos que IDIOMA_LOCAL es una variable/constante que tiene el idioma del usuario. }
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
<?php echo 'Un texto de prueba'.$valor_numerico.'Aca otro texto'.$otro_valor.'otra cosita mas';
Para algo como eso tendrías que hacer 3 accesos a la DB. Una locura.