Hola a tod@s, Carlos E. R. ha scritto:
Creo recordar que es una macro. Y por cierto, lo de la "colaboración" por parte de los desarrolladores poniendo dicha macro es un eufemismo. A mi, como desarrollador de grass me "obligan" a ponerlo. Claro que después como traductor lo agradezco :P
ji, ji O:-)
Y estás en ambos bandos :-)
Ya sabes, sarna con gusto... Empecé como desarrollador para la tesis de doctorado. Cuando me fui involucrando en el proyecto vi que no había casi ningún hispano-hablante que utilizara el programa y pensé que quizas le dariamos un empujón si lo traduciamos al español.
Lo que sucede es que si un programa o librería, al arrancarse, la parte de inicialización de gettext mira si existe el .mo correspondiente, y en caso afirmativo interceptará todos los strings originales cambiandolos al vuelo por su equivalente traducido.
¿capishi?
Non più di tanto, ma funziona ;)
Mi italiano no llega a tanto...
Lo que quiero decir es que realmente no sé como hacen para leer los mensajes desde los .mo, pero si sé el proceso desde los mensajes tipo _("Hello world!") pasando por los .pot y los .po hasta llegar al .mo y la salida en pantalla (o donde sea): $ ¡HOLA MUNDO!
Hay varias maneras de hacer que los mensajes salgan en varios idiomas. Una es tener un array de dos dimensiones: una el idioma, otra el mensaje. Con cambiar el indice de idioma, cambias de idioma al vuelo. Pero para cambiar un programa ya hecho tienes que ir moviendo todos los mensajes uno a uno de donde están a otro sitio para definir el array, y eso es bastante pesado. Para añadir un nuevo idioma hay que recompilar, y los tiene que añadir el desarrollador.
No me parece la mejor solución, la verdad.
Otra variación es usar no constantes o variables, sino funciones: se llama a una función con un número, y devuelve un string adecuado. La función ya se las arreglará, pero puede cargar los mensajes de diversos ficheros externos según los varios idiomas. Es más fácil para los traductores, pero el paso inicial de crear los mensajes aparte es igualmente pesado para los desarrolladores. ... Más la función _() que no he definido. En cualquier caso, tienes que ir cortando y copiando los textos de un fichero a otro, que es pesado, y los programadores no querrán - salvo que se haya hecho el programa así desde el principio.
Hombre, siempre es mejor que la otra. En esta los desarrolladores tienen menos que ver con los mensajes.
La solución gettext es sencilla de aplicar por el programador, porque se cambia:
printf("Hello World.\n");
en
printf(_("Hello World.\n"));
que es muy fácil de cambiar. El truco es que el índice ya no es un número, ¡sino el propio string! Es más pesado computacionalmente, pero se puede aplicar bien en un programa ya terminado. De ahí lo de "a posteriori".
Aunque sea "a posteriori" me parece la forma más "limpia" en el sentido que el desarrollador se desentiende de los mensajes y los traductores del codigo. Entonces, lo mismo que entendia yo por "a posteriori". Lo que no sabia era el método "a priori".
Tienes toda la razón. La lógica borrosa dichosa deja algo que desear X-P
¡Algo! Caray... lástima de no haber guardado las barbaridades que me traduce.
X-) Un saludo, Roby --------------------------------------------------------------------- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org