Gettext/Ollada

En Galilibros, o Wikibooks en galego.
Gettext
← Volver a Ficheiros Ollada Seguir con Instalación do sistema operativo


O diagrama que se amosa a continuación representa a relación entre os ficheiros manexados por Gettext e as ferramentas que actúan somre ditos ficheiros. Despois amósanse explicacións máis detalladas, que estaría ben que lese ao tempo que visualiza o organigrama. A comprensión destas relacións de seguro resultará útil a programadores, tradutores e coordinadores.

   Código fonte en C ───> Preparación ───> Código en C marcado ───╮
                                                                  │
                   ╭─────────<─── Biblioteca GNU Gettext          │
     ╭─── make <───┤                                              │
     │             ╰─────────<────────────────────┬───────────────╯
     │                                            │
     │   ╭─────<─── PAQUETE.pot <─── xgettext <───╯   ╭───<─── Compendio PO
     │   │                                            │              ↑
     │   │                                            ╰───╮          │
     │   ╰───╮                                            ├───> Editor PO ───╮
     │       ├────> msgmerge ─────> LINGUA.po ────>───────╯                  │
     │   ╭───╯                                                               │
     │   │                                                                   │
     │   ╰─────────────<───────────────╮                                     │
     │                                 ├─── Novo LINGUA.po <─────────────────╯
     │   ╭── LINGUA.gmo <── msgfmt <───╯
     │   │
     │   ╰───> instalar ───> /.../LINGUA/PAQUETE.mo ──╮
     │                                                ├───> «Ola mundo!»
     ╰───────> instalar ───> /.../bin/PROGRAMA ───────╯

Coma programador, o primeiro paso para incorporar GNU Gettext ao teu paquete é identificar, no código fonte en C, as cadeas que deberían poderse traducir, e as que non. Este traballo tedioso pode volverse máis doado utilizando o modo PO de Emacs, pero podes utilizar os medios cos que che sintas máis cómodo á hora de modificar o teu código en C. A aparte disto, hai outros cambios estándar sinxelos que necesitará para inicializar a biblioteca de tradución.

No caso de software novo, é evidente que as cadeas deberíanse marcar a medida que se escribe o código. O enfoque de Gettext convérteo nunha tarefa ben doada. Limítese a situar as seguintes liñas ao comezo de cada ficheiro ou nun ficheiro de cabeceira central:

     #define _(String) (String)
     #define N_(String) String
     #define textdomain(Domain)
     #define bindtextdomain(Package, Directory)

Isto permítelle preparar os seus códigos fonte para a súa internacionalización. Máis adiante, cando pense que xa está listo para usar a biblioteca de Gettext, simplemente substitúa eses #defines polo seguinte:

     #include <libintl.h>
     #define _(String) gettext (String)
     #define gettext_noop(String) String
     #define N_(String) gettext_noop (String)

e crea unha ligazón a libintl.a ou libintl.so. Teña en conta que nos sistemas GNU non precisa crear unha ligazón a libintl, posto que as funcións da biblioteca Gettext xa forman parte da GNU libc. Iso é o único que ten que cambiar.

Unha vez modificados os códigos fonte, a aplicación xgettext encárgase de atopar e extraer todas as cadeas traducibles, e crea un modelo de ficheiro PO con todas elas. Este ficheiro (package.pot) contén todas as cadeas orixinais do programa. Este ficheiro contén grupos de punteiros que sinalan ao lugar onde se usan todas e cada unha das cadeas no código en C. Establécense todas as traducións como baleiras. A letra t da extensión do ficheiro .pot indica que se trata dun modelo de ficheiro PO, aínda sen orientar cara unha linguaxe concreta. Bótelle unha ollada á chamada de xgettext para máis detalle acerca de como chamar á aplicación xgettext.

De todos xeitos, a primeira vez non existe aínda ningún ficheiro do tipo lang.po, así que o paso do msgmerge pode substituírse por facer unha simple copia de package.pot co nome de lang.po, onde substituiremos «lang» polo código da lingua da que se trate.

Entón toca a tradución inicial das mensaxes. A tradución é un tema de por si, de índole exclusivamente humano, e cunha complexidade que supera os obxectivos deste manual. A pesar diso nalgúns puntos do manual aparecerán algúnjs consellos relacionados con este tema. Asemade o manual conta con instrucións para contactar cos equipos de tradución, ou pasar a formar parte deles, para así compartir a túa experiencia na traduciónb con aqueles que traducen á mesma lingua ca ti. Se pretendes traducir software libre ao galego, ao mellor deberías informarte acerca do Proxecto Trasno.

Ao engadir mensaxes (ou cadeas) traducidas ao ficheiro PO, se non utiliza un editor específico de ficheiros PO, vostede mesmo terá que facerse cargo de respectar o formato de ficheiro PO e as convencións de edición. Por suposto que facelo non é imposible, e de feito arredor dos 90 moita xente apañouse dese xeito. Pola outra banda, no caso de usar un editor de ficheiros PO, non tes que te preocupar da meirande parte dos detalles, aínda que tes que familiarizarte co editor en si.

Se algunhas das traducións xa están presentes nun ficheiro de compendio PO, os tradutores poden inicializar as entradas sen traducir a partires do compendio, así coma seleccionar traducións concretas do compendio, actualizándoo. Os ficheiros de compendio están pensados para seren intercambiados entre os membros dun mesmo equipo de tradución.

Os aplicativos, ou os paquetes de aplicativos, son dinámicos por natureza: os usuarios informan de erros ou suxiren melloras, os mantedores reaccionan modificando os programas de varios xeitos. O feito de que un programa xa estea internacionalizado non debería ser impedimento para que os mantedores engaedan novas cadeas, ou modifiquen as que xa foron traducidas. Eles sinmplemente adícanse a facer o seu traballo o mellor que poden. Para que o proxecto de tradución funcione axeitadamente, é importante que os mantedores non carguen con traballos de tradución, pois xa teñen responsabilidades abondo, e así mesmo os tradutores é preferible que sexan alleos na medida do posible aos traballos de programación. Do único do que se deberían preocupar os mantedores é de asegurarse de que as novas cadeas sexan traducibles, sempre que así deba ser, e que non se preocupen da súa tradución, posto que esta xa se fará cando ao seu tempo. En consecuencia, cando os aplicativos e as súas cadeas modifícanse dalgún xeito por parte dos mantedores, normalmente por asuntos alleos á tradución, xgettext creará ficheiros package.pot que evolucionarán ao longo do tempo, de xeito que as traducións en forma de ficheiros lang.po quedarán desactualizadas pouco a pouco.

É importante que tanto tradutores coma mantedores entendan que o de tradución é un proceso constante na vida dun paquete, e non algo que se fai unha vez e xa está. Tras unha intensa actividade de tradución inicial para un paquete, de cando en vez fai falla volver traballar na tradución, porque algunhas traducións vólvense obsoletas e asemade aparecen novas cadeas de texto sen traducir.

O programa msgmerge ten coma finalidade a de actualizar todos os ficheiros lang.po, comparándoos co último ficheiro modelo package.pot, extraído por xgettext dun código de C recente. A operación de actualización axusta todas as referencias á situación das cadeas no código, posto que estas desprázanse a medida que se modifican os programas. Así mesmo, msgmerge marca coma obsoletas no ficheiro lang.po aquelas entradas traducidas que xa non están presentes no código fonte. Para rematar, atopa as cadeas novas e as introduce no ficheiro PO resultante coma cadeas sen traducir. Máis adiante profundizarase en todos estes aspectos.

Se faga como se faga, o obxectivo é obter un ficheiro lang.po con traducións para todas as cadeas.

Unha vez completamente (ou parcialmente) traducido o ficheiro PO, o programa msgfmt adapta o ficheiro PO a un formato que lle resulte familiar á máquina, para que os programas interactúen coas traducións de maneira eficiente, sempre que se necesite durante a execución do programa (ficheiros MO).

Por último, os códigos fontes en C compílanse e líganse coa biblioteca GNU Gettext, normalmente a través da operación make, sempre que exista un ficheiro Makefile do proxecto, e como resultado o executable instálase nun lugar no que os usuarios poderán acceder a el. Tamén deberían instalarse os ficheiros MO axeitadamente. Sempre que se establezan correctamente as variables do ambiente, o programa debería localizarse de xeito automático ao executarse.

Agora procederemos a profundizar nos diferentes aspectos.


Gettext
← Volver a Ficheiros Ollada Seguir con Instalación do sistema operativo