Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: gAb1 en 7 Mayo 2015, 22:55 pm



Título: [Resuelto] cargar traducciones para web con memcached
Publicado por: gAb1 en 7 Mayo 2015, 22:55 pm
Hola buenas. Necesito crear un sistema de traduccion para una web y estoy pensando en usar memcached para que no disminuya el rendimiento al tener que cargar tantos textos.

La idea sería guardar todo en una tabla de base de datos, cargarlo en la memoria y de ahí a los clientes. Pero es la primera vez que voy a usar esto y no estoy muy seguro de como hacerlo.

De todas formas agradezco cualquier otra surgerencia para hacer esto, pero no creo que vaya a cargar directamente de la db o de un fichero xml o bueno no se si hay alguna manera para que no sea lento pero creo que lo mejor será usar memcache.

Primero se detectará el lenguaje del navegador:

Código
  1. $languages = array('en', 'es', 'fr', 'de', 'it');
  2.  
  3. $preference = (isset($_COOKIE['lang'])) ?
  4.    $_COOKIE['lang'] : ((isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) ?
  5.        Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']) : '');
  6.  
  7. $locale = Locale::lookup($languages, $preference, false, 'en');

No estoy seguro de como hacer esto, pero supongo que a peticion de la pagina cargada se enviarian los textos correspondientes o ¿de que manera podría hacer esto?

Gracias!


Título: Re: cargar traducciones para web con memcached
Publicado por: poco_digo en 9 Mayo 2015, 21:41 pm
Hola observa como lo solucioné aquí
https://github.com/Mrbytes/U-232-V3-custom/commit/4783dfdf8cc30e8f8fc5c4b2a8bbdc1e56f0f829
Usé Sqlite3 y dos funciones que ya había implementadas en database.php [take_out_remarks () y split_sql_file ()]
Creé una función  [____($words)] observa como le paso el texto original en ingles, con objeto de que me lo busque en el locale del cliente que le pasa el navegador.
El hecho de dejar el texto original en ingles dentro del script PHP tiene como objeto el poder localizar con más facilidad la ubicación de los textos dentro del código.

El uso de sqlite3 y una DB in-memory hace que no sea preciso credenciales para conectarse a ella. Por otro lado no usé memcache por que su uso haria redondantes los datos en memoria, y como ves sólo carga en memoria los locales que se soliciten, no todos (mira como hice uso del comando CASE en el sql). Sustituye el NULL por el texto traducido correspondiente.

La tabla script_texts tiene 9 campos de traducciones, pero puedes añadirle más o quitarle los que no creas necesarios.

Saludos


Título: Re: cargar traducciones para web con memcached
Publicado por: gAb1 en 10 Mayo 2015, 16:28 pm
Muchas gracias, lo estoy adaptando a mis necesidades.