Internacionalización / soporte multi lengua

15 views
Skip to first unread message

Tatiana Al-Chueyr Pereira Martins

unread,
Jun 15, 2008, 11:26:39 AM6/15/08
to Catalis
Buenos días,

Estoy estudiando Catalis, pero surgiram algunas dudas con respecto a
la internacionalización de la aplicación.

1. ¿Hay algun proyecto en curso o prunto para la
internacionalización / traducción de Catalis?

En caso afirmativo, dos preguntas más:

2. Relacionado al desarollo, ¿son usados archivos XML o quizás gnu-
gettext (.po y .mo archivos) para apoyar el soporte multi-lengua?

3. ¿Cómo yo podría ayudar con la traducción de la aplicación para
portugués, si no haya?

Gracias,

Tatiana

Fernando Gómez

unread,
Jun 15, 2008, 5:14:06 PM6/15/08
to cat...@googlegroups.com
> 1. ¿Hay algun proyecto en curso o prunto para la
> internacionalización / traducción de Catalis?
>
> En caso afirmativo, dos preguntas más:
>
> 2. Relacionado al desarollo, ¿son usados archivos XML o quizás gnu-
> gettext (.po y .mo archivos) para apoyar el soporte multi-lengua?
>
> 3. ¿Cómo yo podría ayudar con la traducción de la aplicación para
> portugués, si no haya?


Tatiana,

Muchas gracias por tu interés en Catalis, y específicamente por
ofrecer ayuda para la traducción al portugués.

La versión original de Catalis, que es la que actualmente está
disponible para download, no tenía previsto nada en cuanto a
internacionalización. La versión nueva, que está en desarrollo, y de
la cual puedes ver un demo (algo desactualizado!) en

http://inmabb.criba.edu.ar/catalis/catalis.php?p=demo

será fácilmente adaptable a otros idiomas.

Como un primer paso, para la traducción de los mensajes de la
interfaz, decidí adoptar la misma técnica que usa Ext JS, dado que la
nueva interfaz estará basada en ese framework. Esto es, para cada
idioma habrá un archivo .js con los textos que corresponden a ese
idioma, y el browser solamente pedirá al servidor el archivo .js
apropiado. Ejemplo:

http://extjs.com/deploy/dev/examples/locale/multi-lang.html?lang=pt

Por otra parte, no sabía nada sobre GNU gettext hasta hace unos pocos
meses, cuando empecé a aprender Python y Django. Django usa gettext
para i18n. Y esta nueva versión de Catalis está usando Django, de
manera que gettext podría jugar un papel en Catalis... pero la verdad
es que aún no me puse a analizar la cuestión en detalle.

Por lo tanto, si te interesa este tema y quieres hacer alguna
sugerencia, podríamos empezar a discutirlo, tomar algunas decisiones,
y dejar establecido el mecanismo a usar para la próxima versión de
Catalis.

Saludos.

--
Fernando

Tatiana Al-Chueyr Pereira Martins

unread,
Jun 17, 2008, 11:42:17 PM6/17/08
to Catalis
Hola Fernando,

Gracias por su respuesta rápida y esclarecedora. Tengo alguna
experiencia con Python y gettext. Nunca he utilizado otros sistemas
i18n, entonces no lo puedo comparar con Ext JS.

El proceso de traducción con GNU gettext es rápido y eficiente, creo
que es un bueno mecanismo para la nueva versión de Catalis. Escrebi
una descripción del procedimiento para la traducción con GNU-gettext y
Python abajo.

La nueva versión de Catalis está disponible en algún servidor CVS o
SVN abierto al público? Eventualmente yo podría ayudarlo con eso.

Saludos,

Tatiana

------------------------------------------------------------------------------------------------------------------

Proceso de traducción con GNU gettext en Python

1. La enmienda en el código fuente (.py)

Hay dos cosas que deben ajustarse en el código fuente:

(a) Colocar el "_" delante de todas las strings que se quiera
traducir:
"Help" -> _("Help")
"File" -> _("File")

(b) Al comienzo de la aplicación deve de se establecer el idioma de
interés y el "_":

import gettext
import locale

locale="es"
lang = gettext.translation("Catalis", languages=[locale])
lang.install()
_ = lang.gettext

print _("Help")
print _("File")


2. Creación de archivos de catálogo o diccionario (.po)

Todas las strings que originalmente habían sido marcadas con "_" en
el código fuente seran "llaves" el diccionario con las traducciones.

Habrá un diccionario para cada idioma, y su formato de archivo se
llama .po. Un ejemplo de archivo .po se ilustra abajo:

#
-------------------------------------------------------------------------
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE
package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid “”
msgstr “”
“Project-Id-Version: PACKAGE VERSION\n”
“Report-Msgid-Bugs-To: \n”
“POT-Creation-Date: 2006-12-01 23:59-0500\n”
“PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n”
“Last-Translator: FULL NAME \n”
“Language-Team: LANGUAGE \n”
“MIME-Version: 1.0\n”
“Content-Type: text/plain; charset=CHARSET\n”
“Content-Transfer-Encoding: 8bit\n”

#: Test.py: 9
msgid "Help"
msgstr "Ayuda"

#: Test.py: 10
msgid "File"
msgstr "Archivo"
#
-------------------------------------------------------------------------

Es posible generar el archivo de base de diccionario automáticamente
de el codigo fuente, por lo que sólo tiene que preocuparse con las
traducciones. Para hacer esto, en general, se utiliza el software
xgettext, también del proyecto GNU:

Con el comando:
$ xgettext test.py

Usted genera el correspondiente fichero messages.po (cabecera y con
todos los términos, referencias a las líneas en que aparecen), y que
sólo tienen que preocuparse por la traducción.

3. "Compilación" de diccionarios (.po -> .mo)

Después de traducir a todos los idiomas de interés, es necesario
compilar los archivos .po creados, generando archivos .mo, que serán
utilizados por el sistema. Para eso deve se usar el software msgfmt.
Yo creo que el .mo es similar ao .js, pelo usted me dijo.
$ msgfmt messages.po

Con eso tendrá el catálogo / diccionario en formato binario.

4. Inserción de diccionarios en el fichero de la lengua

Por último, hay un fichero para cada idioma y se renombra los archivos
a el "domain" de interés, en el caso "Catalis":
. /Locale/es/LC_MESSAGES/Catalis.mo
. /Locale/pt/LC_MESSAGES/Catalis.mo

Y listo! Su aplicación está internacionalizada.

Fernando Gómez

unread,
Jul 10, 2008, 7:18:22 PM7/10/08
to cat...@googlegroups.com
2008/6/18 Tatiana Al-Chueyr Pereira Martins <tati.a...@gmail.com>:

> Hola Fernando,

Hola Tatiana!

Muchas gracias por tu explicación sobre el proceso de traducción.

> Gracias por su respuesta rápida y esclarecedora. Tengo alguna
> experiencia con Python y gettext. Nunca he utilizado otros sistemas
> i18n, entonces no lo puedo comparar con Ext JS.

Esta vez mi respuesta no fue rápida, pero creo que valió la pena esperar...

> La nueva versión de Catalis está disponible en algún servidor CVS o
> SVN abierto al público? Eventualmente yo podría ayudarlo con eso.

Pues no estaba disponible cuando escribiste, pero a partir de *hoy* sí
está. Estuve trabajando sobre Google Code para alojar el proyecto:

http://code.google.com/p/catalis/

La situación es todavía algo inestable, la funcionalidad disponible
aún es parcial, pero ya se puede ir viendo y testeando. Creo que eso
será saludable para Catalis. (Las instrucciones de instalación aún
pueden no estar del todo claras!)

En particular, puedes ver cómo están actualmente los archivos de
localización de JavaScript:

Español: http://code.google.com/p/catalis/source/browse/trunk/static_files/catalis/js/catalis-lang-es.js
Inglés: http://code.google.com/p/catalis/source/browse/trunk/static_files/catalis/js/catalis-lang-en.js

No será difícil añadir una versión en portugués. :-)

Como casi el 100% de la interfaz de Catalis se genera con JavaScript,
aún no estoy seguro de cuán útil o necesario sería gettext/python para
Catalis... tendré que pensar más sobre esto, como dije antes.

Saludos!

--
Fernando

Fernando Gómez

unread,
Jul 11, 2008, 5:38:31 PM7/11/08
to cat...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages