Gettext izar en Python e Python+Glade

From Proxecto Trasno
Revision as of 16:33, 3 March 2010 by 213.60.148.72 (talk)

Xa que gran parte dos procesos son comúns a calquera linguaxe de programación, vou referir aquí só os puntos característicos (ou particulares) de Python e Glade.

Recomendo a lectura dos outros dous procesos:


Phyton

Cabeceira

import gettext  
APP="nome_aplicativo"  
DIR="./locale" #/usr/local/share/locale" #/usr/share/locale"  
gettext.textdomain(APP)  
gettext.bindtextdomain(APP, DIR)
# gtk.glade.textdomain(APP)  
# gtk.glade.bindtextdomain(APP, DIR)   
     gettext.install('py-gtkshots', 'po', True)
_ = gettext.gettext

Exemplo de liñas de código con cadeas preparada

except:
	print >> sys.stderr, _("Cannot load Pango")
	raise SystemExit

f = commands.getoutput('type -path fc-list')
if not f:
	print >> sys.stderr, _("You need FontConfig to run FONTpage")
	raise SystemExit

Xerando o ficheiro de plantilla de tradución

xgettext meu_aplicativo.py -o locale/mensaxes.pot --from-code=utf-8

ou

xgettext -k_ -kN_ -o mensaxes.pot *.py *.h

o parámetro

 --from-code=utf-8

só é preciso naqueles casos en que o ficheiro fonte .py non estea xa definido como UTF-8

así mesmo podemos empregar o comodín * cando se traballa con máis dun ficheiro


Glade

Ferramentas utilizadas:

   * PyGtk
   * Glade
   * Python 2.3
   * GNU gettext
   * Gtk+ 2.4.1
   * Libglade 2.4.0

Cabeceira

A Cabeceira é case a mesma que a que leva se fose só Python, agás as dúas liñas que víamos antes comentadas en Phython. Esta cabeceira se engade aos ficheiros .py xa que os .glade imos ver a seguir como tratalos.

import gettext  
APP="nome_aplicativo"  
DIR="/usr/local/lib/nome_aplicativo/po"  
gettext.textdomain(APP)  
gettext.bindtextdomain(APP, DIR)
gtk.glade.textdomain(APP)  
gtk.glade.bindtextdomain(APP, DIR) 
   gettext.install('py-gtkshots', 'po', True)
_ = gettext.gettext

Extraendo as mensaxes de Glade

Necesitamos intltool, unha utilidade para internacionalizar documentos en XML. Usando Debian abonda con:

apt-get install intltool

O aplicativo intltool-extract extrae as cadeas de texto dun ficheiro glade (no exemplo meuprograma.glade) e xera un ficheiro .h (no exemplo meuprograma.h):

intltool-extract --type="gettext/glade" meuprograma.glade

Non é preciso editar o ficheiro .h, xa se encarga de lelo xgettext sen máis.

Xerando o ficheiro de plantilla de tradución

xgettext -k_ -kN_ -o mensaxes.pot *.py *.h

Creará un ficheiro de traducción mensaxes.pot a partires dos códigos fonte python e dos ficheiros .h xerados por intltool-extract


Creando ficheiros .po de tradución

Para que sexa posíbel crear traducións para diferentes idiomas é necesario crear ficheiro para cada unha. Para isto empregase msginit. Para galego:

msginit -o locale/gl.po -i locale/mensaxes.pot

Para castelán/español

msginit -o locale/es.po -i locale/mensaxes.pot

A partires de aquí xa só hai que seguir os métodos de tradución usuais.