Si tienes programas realizados en Python/Glade, puede ser útil internacionalizarlos, el texto de los menús/mensajes/botones, etc, se mostrará en el idioma definido en el sistema.
Herramientas utilizadas:
- PyGtk
- Glade
- Python 2.3
- GNU gettext
- Gtk+ 2.4.1
- Libglade 2.4.0
Extrayendo los mensajes de Glade:
Necesitarás de intltool, una utilidad para internacionalizar documentos en XML. Si usas Debian alcanza con teclear:
apt-get install intltool
El programa intltool-extract extrae las cadenas de texto de un archivo glade (en el ejemplo “miprograma.glade”) y genera un archivo .h (en el ejemplo “miprograma.h”):
intltool-extract --type="gettext/glade" miprograma.glade
No se necesita editar el archivo .h, será leido por xgettext.
Generando archivo de traducción:
xgettext -k_ -kN_ -o mensajes.pot *.py *.h
Creará un archivo de traducción “mensajes.pot” a partir de los codigos fuente python y de los archivos .h generados por intltool-extract
Creando archivos de traducción:
Para que sea posible crear traducciones para diferentes idiomas es necesario crear un archivo para cada una. Para esto se utiliza msginit.
En este ejemplo msginit crea el archivo es_ES.po adecuado para la traduccion al español:
msginit -i mensajes.pot -l es_ES
Una vez traducido el archivo es_ES.po es necesario generar el archivo que será utilizado por el programa:
msgfmt es_ES.po -o po/pt/LC_MESSAGES/miprograma.mo
No importa el nombre del directorio donde se coloque el archivo *.mo, pero la estructura del directorio tiene que ser <directorio>/<locale>/LC_MESSAGES/<nombre-de-programa>.mo. Donde <locale> es algo como es o es_ES.
Hacer que el programa reconozca las traducciones :
Tipicamente un programa de python usando libglade tendrá strings para ser traducidas tanto en el programa python como en el arquivo glade. Para lidiar con los strings en las fuentes python se puede usar el módulo gettext. Todos los strings a ser traducidas deven usar el método gettext de ese módulo:
print gettext.gettext("Texto a ser traducido")
Es mucho mas práctico usar el formato _(<string>), pero para eso se debe definir _ como gettext.gettext:
_ = gettext.gettextprint _("Texto a ser traducido")
Normalmente los archivos con mensajes de traducción van en “/usr/share/locale”, pero mientras tanto este desarrollando su programa es bastante útil tenerlos en un directorio local, algo como “i18n” o “po”:
APP=‘miprograma’
DIR=‘po’
Un ejemplo mas completo serÃa:
import gettext
APP='miprograma'
DIR='po'
gettext.bindtextdomain(APP, DIR)
gettext.textdomain(APP)
_ = gettext.gettext
gtk.glade.bindtextdomain(APP, DIR)
gtk.glade.textdomain(APP)
gui = gtk.glade.XML("miprograma.glade")
.....
Del original en portugues