Introducció als fitxers PO
Aquest article és una introducció als fitxers PO, en quins aspectes hem de posar especial cura i quines eines podem usar per treballar amb ells.
Els fitxers PO (Portable Objects) són un format molt popular dins del programari lliure per gestionar traduccions de programari i documentació. Es tracta de fitxers de text amb extensió PO, pensats per ser senzills d’usar per a traductors, que un cop processats són convertits en fitxers MO (Machine Objects), de format binari, per tal que les aplicacions els puguin carregar de forma més eficient.
Els fitxers de PO al ser fitxers de text es poden obrir en qualsevol processador de textos o amb eines específiques com veurem més endavant.
La capçalera PO
Els fitxers PO comencen amb una capçalera que facilita detalls perquè la traducció del programa pugui ser processada correctament. Un fitxer PO d’un programa sense traduir al català conté una capçalera com la següent que convé emplenar correctament:
# 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 <EMAIL@ADDRESS>, YEAR. #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-12-16 03:48+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
Les cadenes que comencen amb «#» són comentaris. Se’n poden afegir tantes com es vulgui. Els textos en majúscula s’han de reemplaçar tal com expliquem a continuació.
El camp POT-Creation-Date indica el dia i hora que el fitxer PO es va crear o actualitzar. Habitualment aquest camp ha de contenir una data de fa pocs dies. El camp PO-Revision-Date utilitza el mateix format que l’anterior i conté l’últim dia i hora que la traducció va ser actualitzada. En un fitxer, com en l’exemple, sense traduir cal emplenar-la. Si ja està traduït i s’ha actualitzat la traducció cal llavors actualitzar també aquest camp amb la darrera data de la traducció.
El camp Last-Translator conté el nom i adreça de correu electrònic de l’última persona que va treballar amb la traducció. Per exemple:
"Last-Translator: David Planella Molas <david.planella@gmail.com>\n"
És important incloure aquest camp per tal de poder contactar amb el darrer traductor per si tenim cap dubte o volem saber si encara treballa amb la traducció.
El camp «Language-Team» s’ha d’emplenar amb la llista de correu corresponent, que en general serà la mateixa llista de correu que fem sevir per coordinar-nos. Per exemple, en el cas del projecte de traducció del GNOME:
"Language-Team: Catalan <gnome@llistes.softcatala.org>\n"
La codificació que fa servir el nostre editor queda reflectida als camps de contingut següents:
"MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n"
Recomanem treballar amb codificació UTF-8 que permet representar la gran majoria de llengües del món.
El següent camp és opcional i no sempre s’inclou. Fa referència als tipus de plurals que hi ha en català, i és sempre igual, per tant no cal entendre la sintaxi. Apareix en traduccions que contenen missatges que permeten especificar la forma en plural més adequada per a l’idioma:
"Plural-Forms: nplurals=2; plural=n != 1;\n"
Aquest seria un exemple de la capçalera corresponent al programa Evolution en català:
# Evolution translation to Catalan. # Copyright © 2000, 2004, 2005, 2006 Free Software Foundation, Inc. # Softcatalà <info@softcatala.org>, 2000, 2004-2006 # # Víctor Nieto <vnie2025@alu-etsetb.upc.es> # Aleix Badia i Bosch <abadia@ica.es>, 2004 # Xavier Conde Rueda <xavi.conde@gmail.com>, 2004-2007 # Francesc Dorca <f.dorca@filnet.es>, 2004 # Jordi Mas <jmas@softcatala.org>, 2004-2007 # Enric Balletbò i Serra <eballetbo@km103.com>, 2004 # Gil Forcada <gilforcada@guifi.net>, 2006 # David Planella Molas <david.planella@gmail.com>, 2007, 2008 # msgid "" msgstr "" "Project-Id-Version: evolution\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-03-19 12:41+0000\n" "PO-Revision-Date: 2008-02-14 08:53+0100\n" "Last-Translator: David Planella Molas <david.planella@gmail.com>\n" "Language-Team: Catalan <tradgnome@softcatala.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
Els missatges
Els fitxers PO contenen missatges per traduir que tenen el següent aspecte:
#: desktop/client/src/connect.c:1013 msgid "Program path and filename" msgstr ""
El primer camp, msgid, conté la cadena de text original. En el camp msgstr s’ha d’escriure la traducció. Els missatges llargs poden aparèixer en múltiples línies successives. S’ha de tenir en compte que, tot i que apareixen en línies separades, s’ha d’interpretar com una sola línia sencera, no com a línies tallades:
#: index.docbook:138 #, no-c-format msgid "" "You have entered reconfiguration mode, which will allow you to configure " "site-specific features of your computer. To exit without changing your " "setup, select 'No' and press the <guibutton>Next</guibutton> button below." msgstr "" "Heu entrat en el mode de reconfiguració, que us permetrà configurar " "característiques específiques del vostre ordinador. Per sortir sense " "canviar la vostra configuració, seleccioneu 'No' i premeu <guibutton>Següent" "</guibutton> a sota."
En les dues primeres línies de la traducció s’ha afegit un espai al final, però en la tercera no, ja que a l’original (<guibutton>Next</guibutton>) no n’hi havia.
A més, hi poden haver abans vàries línies que comencen amb el caràcter ‘#’. Es tracten de comentaris, i tenen un significat especial:
- Els que comencen amb el caràcter ‘#’ són comentaris dels traductors. Podem afegir comentaris, si ho trobem necessari.
- Els que comencen amb els caràcters ‘#.’ són comentaris dels programadors. Poden ser indicacions sobre el significat d’un terme escrit.
- Els que comencen amb els caràcters ‘#:’ són referències a la línia del fitxer de codi font d’on es va extreure.
- Els que comencen amb els caràcters ‘#~’ són cadenes invàlides. En actualitzar el document a una versió més recent, es poden haver esborrat algunes cadenes. Es conserven al fitxer per si serveixen al traductor. Com que no tenen cap utilitat, es poden esborrar. Solen estar acumulades al final del document.
Els que comencen amb els caràcters ‘#,’ són modificadors. El programari que comprova la sintaxi del document pot afegir comprovacions addicionals. N’hi ha dues d’importants:
1. ‘#, fuzzy’. Quan s’actualitza un fitxer PO amb una versió més nova, el programari intenta respectar les cadenes originals i trobar concordances per a les noves. Quan no troba una concordança exacta, el programari la marca com a fuzzy (difosa). Fins que no s’esborra aquest modificador, se suposa que no està ben traduïda:
#: desktop/client/src/connect.c:736 desktop/client/src/connect.c:738 #, fuzzy msgid "Remote Desktop Size" msgstr "Remot"
2. ‘#, c-format’. S’afegeix aquest modificador per indicar que la cadena de text conté modificadors de format usats en el llenguatge de programació C. El programari que verifiqui la sintaxi farà comprovacions addicionals en la cadena traduïda.
En primer lloc, alguns caràcters especials es representen amb una barra invertida (‘\’) al davant. Alguns dels més comuns són:
- ‘\t’: inserció d’una tabulació
- ‘\n’: indicador de final de línia
- ‘\»’: inserció del caràcter de cometes dobles
Exemple:
#: gnome-netinfo/lookup.c:336 msgid "Source\tTTL\tAddress Type\tRecord Type1\tResolution\n" msgstr ""
Les cadenes també contenen seqüències de caràcters, que substitueixen cadenes de text o xifres. Les seqüències comencen amb el caràcter ‘%’, i algunes tenen el següent significat:
- ‘%c’: se substituirà per un sol caràcter
- ‘%d’: se substituirà per un nombre enter
- ‘%u’: se substituirà per un nombre enter positiu
- ‘%f’: se substituirà per un nombre decimal
- ‘%s’: se substituirà per una cadena de text
En aquest cas, es pot indicar el nombre de xifres decimals, p.e ‘%.2f’ serà una xifra amb dos decimals. Hem d’anar amb compte en traduir cadenes que continguin aquests modificadors de format, per tal de no oblidar-los, ni canviar-los per seqüències invàlides. També hem de recordar que no s’ha de canviar l’ordre relatiu dels modificadors en la cadena original. Per exemple:
#. A "what failed" message when the failure is likely to be permanent; this URI won't be openable #: src/cong-error-file-open.c:82 #, c-format msgid "cannot read \"%s\" from %s." msgstr "no pot llegir \"%s\" des de %s."
En aquest missatge hi ha dues cadenes %s: la primera és el text que s’ha de llegir, el segon el fitxer que s’ha de llegir. En la traducció no es pot canviar aquest ordre relatiu. És incorrecte: msgstr “no es pot llegir del fitxer %s la cadena \”%s\”.”
Missatges en plural
A més, en algunes ocasions el programari permet especificar en un mateix missatge la forma en singular i plural. Hem de tenir en compte que en alguns llenguatges hi ha diferents maneres d’expressar el plural segons el valor del cardinal. Per exemple, en polonès, el terme plik (fitxer) té els següents plurals segons el cardinal:
1 plik 2,3,4 pliki 5-21 pliko'w 22-24 pliki 25-31 pliko'w
Però millor veure com es tradueixen aquests missatges en català. Recordem que a la capçalera (quan apareixi aquest camp) definirem així el camp següent:
"Plural-Forms: nplurals=2; plural=n != 1;\n"
Per exemple, el següent missatge:
#: src/gnome-cmd-delete-dialog.c:336 #, c-format msgid "Do you want to delete the selected file?" msgid_plural "Do you want to delete the %d selected files?" msgstr[0] "S'ha seleccionat %d fitxer. Desitgeu esborrar-lo?" msgstr[1] "S'han seleccionat %d fitxers. Desitgeu esborrar-los?"
Inicialment, els camps msgstr[0] i msgstr[1] estan buits i els hem d’emplenar amb les traduccions:
- El programari usarà el missatge msgstr[0] automàticament quan %d sigui igual a 1: (“S’ha seleccionat 1 fitxer. Desitgeu esborrar-lo?”)
- El programari usarà el missatge msgstr[1] automàticament quan %d sigui diferent que 1: (“S’han seleccionat 32434242444 fitxers. Desitgeu esborrar-los?”). També s’usarà quan %d sigui 0, tot i que possiblement el programador hàbil no ens consultarà en situacions referides al 0: (no té sentit “S’han seleccionat 0 fitxers. Desitgeu esborrar-los?”)
- En cas que hi hagin msgstr[2], msgstr[3]… etc, aquestes no s’usaran en el programari en català donada la sintaxi emprada en la capçalera. No cal que es tradueixin.
Eines de traducció de fitxers PO
Tot el que cal és un editor de text, però n’hi ha d’especialitzats que us poden facilitar el treball amb fitxers PO. Sense voler-ne recomanar cap en concret, aquí hi ha una llista dels que ens sembla que us poden ser més útils:
- Eines multiplataforma
- PoEdit – És una eina de localització tant per a Windows com per a GNU/Linux que permet treballar amb fitxers PO i usar memòries de traducció. Es troba traduïda al català, i també està disponible per a GNU/Linux.
- Eines per a GNU/Linux
- Gtranslator – El Gtranslator és l’eina de localització creada al voltant del projecte d’escriptori GNOME. És una eina molt completa que permet traduir fitxers PO i treballar amb memòries de traducció.
- Lokalize – El Lokalize és l’eina de localització creada al voltant del projecte d’escriptori KDE. És una eina molt completa que permet traduir fitxers PO i treballar amb memòries de traducció, i és el substitut del KBabel a partir del KDE 4.
- Virtaal – El Virtaal és un editor de traduccions molt potent basat en les biblioteques del Translate Toolkit.
- Emacs i XEmacs – L’Emacs i L’XEmacs en mode po són uns editors de text per a usuaris avançats, que també funcionen en Windows.
- Eines per a Microsoft Windows
- potranslator – És una eina de localització per a Windows que permet treballar amb fitxers PO, però de moment no implementa les memòries de traducció.
Tasques avançades
CORRECTESA DELS FITXERS PO
Els fitxers PO contenen diversos elements de formats que si usem editors de textos per a traduir-los es poden eliminar per error.
Si treballeu amb entorns GNU/Linux o Unix podeu usar les Manual de les eines gettext per tal de detectar possible errors. Podem usar l’ordre msgfmt de la següent manera:
$ msgfmt -c --statistics ca.po 291 missatges traduïts.
El paràmetre -c d’aquesta ordre verifica la correctesa del fitxer i el paràmetre –statistics ens mostra el nombre de cadenes traduïdes, sense traduir i fuzzy.
Si hi hages cap error msgfmt ens informaria en quines línies es troben i quin és el seu motiu.
INSTAL·LACIÓ D’UNA TRADUCCIÓ
Els fitxers PO són utilitzats pels traductors però les aplicacions treballen amb fitxers MO. Per tal de convertir un fitxer PO cal executar l’ordre següent:
msgfmt -o fitxer.mo fitxer.po
Un cop generat el fitxer MO cal copiar-lo al directori adequat per el vostre sistema operatiu. Normalment fareu locate fitxer.mo per esbrinar on s’instal·la la versió en català i copiareu allà la nova versió. Per exemple, en una Ubuntu el fitxer de la traducció en català per l’editor Gedit es troba a /usr/share/locale-langpack/ca/LC_MESSAGES/gedit.mo. La ubicació d’aquests fitxers canvia entre diferents sistemes operatius i distribucions de GNU/Linux.
Autors: Xavier Conde, Quico Llach, Jordi Mas