Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/zor/mapache.incoherencia.com/weblog.php on line 2248
Incoherencia V9.0

zor

  • mail


blanco
negro
Al azar

  • incoherencia 9





01020304050607080910111213141516171819202122232425262728293031<< May >> << 2009 >>

MAY
21
he soñado la solucion al problema de gengo
21 de May de 2009 a las 13:52| Archivado en Tecnico, Sueno
Escuchando: somafm | Animo: contento

Esta noche he soñado como solucionar un problema que me lleva volviendo loco mas de 3 semanas.

Estoy trabajando con Gengo, un sistema de traducción para un conocido software de blog. El sistema es muy bueno pero el desarrollador principal desapareció hace algun tiempo. Hay una comunidad de gente que sigue desarrollando el sistema, pero tiene una serie de bugs importantes.

Aun así, es la mejor opción ahora mismo. Al menos es la solución la mejor construida. Eso si, no te exime de tocar código sin parar y modificar una gran cantidad de parámetros para que funcione bien y a tu gusto.

[Rollo técnico]
Uno de estos problemas reside en la forma mediante la cual el sistema de blog guarda una caché interna, y como el sistema de traducción intercepta ciertas llamadas a funciones para modificar los resultados. Ambas características sumadas a que las categorías se traducen de una forma poco estandar (con sinónimos en vez de utilizando tablas de traducción en la base de datos) y a que las llamadas al listado de categorías se hacen a través de diferentes funciones, las cuales requieren diferentes filtros, generan un problema de dificil solución.

Así resumido, las categorías no se traducen en absoluto en muchos casos, y de forma aleatoria en otros. Tras investigar todo lo investigable, escribir a todo el mundo, revisar de arriba a abajo el grupo de google de gengo hackers y sacrificar un iguanodonte al dios del sol, la solución es basicamente la siguiente, en palabras del actual desarrollador jefe:

This is the inner caching system of the system, that still pollutes
once in a while. I really need to know more about this system, before
putting my hands on it. I hope to find out someone who'll be able to
explain the problem, if not a patch...


En resumen, que el problema ni siquiera se ha identificado correctamente.

[Intentos]

He probado a revisar el código. Es una tarea imposible. El problema va derivando poco a poco a las entrañas mas profundas del sistema de publicación. Tocar código a ese nivel es impensable y provocaría mas destrozos que arreglos. También he intentado evitar el problema con workarounds, sin resultado. Otra opción ha sido modificar la forma en la que se llama a las funciones. A usar funciones similares. A incrustar el código de forma estática e implícita.
Ninguna opción ha resultado práctica.

El problema ha sido mi falta de pensamiento lateral. Estaba intentando atacar directamente a la fuente del problema en vez de pensar como rodearlo.

[Breve explicación preliminar]
Por otro lado, estoy haciendo la localización de los elementos del interfaz. Para este tema estoy usando el framework gettext de GNU. Ficheros pot y mo que voy creando con las cadenas en cada lenguage, los cuales se leen desde el propio sistema de publicación. A pesar de que hay 23452315 aplicaciones para localización, he preferido usar la linea de comandos, ya que me resulta mas rápida. Un día explicaré por que soy fanatico de desarrollar en el propio servidor siempre, y por lo tanto, de usar siempre servidores de desarrollo, preproducción y producción.

Y esto es lo que he soñado.

He soñado exactamente que estaba viendo el funcionamiento de las llamadas a funciones desde el espacio exterior. Era como una película en 3d, como una simulación. Veía los nombres de las funciones en la sintaxis de color del vim, con su tipografía monospace, moviendose en el espacio. Realmente parecía que estuviera dentro de un debugger gigante.

De pronto la función the_category() se ejecutaba, y aparecía la cadena "Traducción", como casi siempre. En realidad yo sabía que a veces apaercería "Translation", de forma aleatoria. Inmediatamente después se llamaba a la función de gettext, pero esta vez, en vez de pasarle como parámetro una cadena se le pasaba el resultado de la función the_category. Y la categoría "Traducción", independientemente del lenguage en el que se recibiera el resultado, se traducía al inglés


Porque si hago, con gettext:
echo __("Translation");
El resultado sería "Traduccion", y si hago

echo __("Traduccion");
¡El resultado también sería "Traduccion"!

Asi que si hago echo __(the_category()), el resultado de la llamada se traduciría siempre al lenguaje en uso.

Pero claro, eso significaría tener todas las categorías localizadas en el fichero .mo correspondiente a cada uno de los lenguajes. Y no hay nada mas facil, llevo haciendolo desde hace 3 días :)

Que contento estoy. Si tu, amable lector, has sido capaz de llegar hasta aquí, es que estas fatal de la cabeza. ¿Alguna vez habeis resuelto problemas en sueños?
Por zor
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/zor/mapache.incoherencia.com/weblog.php on line 1657