Cap. 4. Traducerea documentaţiilor

Multitudinea de informaţii referitoare la documentaţia KDE este desigur furnizată de echipa pentru documentaţie KDE, īn special de coordonatorul ei Lauri Watts. Vizitaţi pagina ei la: http://i18n.kde.org/doc/.

Recent au apărut două schimbări majore īn această parte:

Astfel au apărut unele modificări īn procesul de traducere. Una dintre ele este faptul că toată documentaţia este convertită la Unicode. La fel ca şi la fişerele PO pentru interfaţa grafică, de acum documentele trebuie să fie īn format UTF-8. Pentru detalii consultaţi secţiunea următoare.

Conversia de la SGML la formatul XML™/PO

Formatul documentaţiei a suferit unele schimbări fundamentale de-a lungul anilor. A īnceput ca HTML, devenind apoi LinuxDoc SGML pentru KDE 1.x şi fiind convertită la formatul DocBook SGML pentru KDE 2.0. Totuşi, un singur lucru nu s-a schimbat: īntotdeauna a fost destul de dificil pentru traducători să īşi menţină munca sincronizată cu documentele originale īn engleză. De aceea, mai devreme sau mai tīrziu mulţi dintre ei au renunţat la traducerea documentaţiei - dacă au īnceput vreodată. Mai mult decīt atīt, formatului SGML īi erau necesare instalarea unor programe foarte complexe şi cu numeroase dependenţe şi parametrii cu care nu era uşor de lucrat. Cīnd KDE a fost extins īn mai multe limbi, problemele legate de limitarea codificării ASCII au devenit foarte importante şi trecerea la XML şi Unicode (īn subformatul său UTF-8) părea acceptabilă.

Pentru a uşura īntreţinerea documentaţiei fişierele sursă au fost convertite la formatul PO. Acest format a fost deja folosit cu mare succes de traducătorii interfeţei grafice. Matthias Kiefer şi contribuitorii săi au extins aplicaţia KBabel pentru a uşura această sarcină (de exemplu: diferenţe colorate, bază de date pentru traducere, terminator de linie extins). Īn aceste condiţii aplicaţia KBabel este probabil foarte utilă nu numai pentru traducătorii GUI ci şi pentru traducătorii de documentaţie. Stephan Kulow a realizat Centrul de Ajutor KDE astfel īncīt acesta poate analiza direct formatul XML™ şi generează din mers cod HTML.

Acesta este scurtul istoric. Şi acum cīteva cuvinte despre conversia propriu-zisă. Dacă documentaţia dumneavoastră este īncă īn format SGML, este recomandat să citiţi următorul exemplu despre cum să vă convertiţi fişierele. Dacă această conversie este deja făcută, puteţi sări peste această secţiune.

Pentru procesul de conversie este nevoie de documentaţia veche tradusă, adică de fişierul docbook (TRADUS.docbook) īn format SGML şi fişierul corespunzător docbook īn engleză (ENGLEZA.docbook). Este important ca aceste fişiere să se potrivească. Dacă nu aveţi unul, puteţi lua o versiune mai veche de pe WebCVS sau din CVS. Veţi avea nevoie de cīteva programe pentru conversie. Stephan Kulow a pus la dispoziţie aceste programe īn pachetul "kdesdk". Īn plus vă mai trebuie aplicaţia iconv care este inclusă īn majoritatea distribuţiilor Linux® şi care realizează conversia īntre diferite metode de codare ("iconv --list" afişează o listă cu metodele de codare suportate). Un alt program care nu este inclus īn modulul "kdesdk" este msgmerge care face parte din pachetul "gettext" şi este folosit la lucrul cu fişiere PO.

IMPORTANT: Īnainte de conversie ar trebui sa schimbaţi entităţile pentru caractere la caracterele corespunzătoare şi să folosiţi metoda de codare corectă pentru conversia la UTF-8. De exemplu, presupunem că scrieţi documentaţie īn romānă. Ar trebui să schimbaţi entitatea &tcedilla; cu caracterul "ţ".

  • Conversia de la metoda dumneavoastră de codare la UTF-8:

    iconv -f CODAREA_DV. -t utf8 ENGLEZA.docbook
    iconv -f CODAREA_DV. -t utf8 TRADUS.docbook
    

  • Corecţia marcării cu taguri, deoarece formatul XML™ este mult mai strict decīt SGML:

    fixsgml ENGLEZA.docbook
    fixsgml TRADUS.docbook
    

  • Conversia la XML™:

    xmlizer ENGLEZA.docbook >ENGLEZA.xml
    xmlizer TRADUS.docbook >TRADUS.xml
    

  • Acum tranziţia la XML™ este completă. Noua documentaţie trebuie verificată pentru erori de sintaxă:

    checkXML ENGLEZA.xml
    checkXML TRADUS.xml
    

  • Separarea documentaţiei īn engleză īn porţiuni "msgid" īntr-un fişier POT:

    xml2pot ENGLEZA.xml >ENGLEZA.pot
    

  • Separarea documentaţiei traduse īn porţiuni "msgstr" īntr-un fişier PO:

    split2po ENGLEZA.xml TRADUS.xml >TRADUS.po
    msgmerge -o TRADUS.po TRADUS.po ENGLEZA.pot
    

Asta este totul. Pasul cel mai important este apelarea aplicaţiei split2po. Dacă marcarea cu taguri diferă, vor apărea erori. Există două aspecte importante de care trebuie să ţineţi cont:

  • Secţiunea de mulţumiri pentru traducători trebuie īndepărtată din fişierul TRADUS.xml īnainte de apelarea aplicaţiei split2po, deoarece acestea nu apar īn documentaţia īn engleză şi deci vor apărea erori după apelarea split2po. Īn fişierul TRADUS.po veţi găsi două "msgid" unde se pot pune mulţumirile cu respectivele marcări (citiţi mai jos), şi anume ROLES_OF_TRANSLATORS şi CREDIT_FOR_TRANSLATORS.

  • Unele echipe de traducători au tradus ID-urile (identificatorii sīnt folosiţi pentru identificarea secţiunilor, capitolelor, ... īntr-un fişier Docbook). split2po va īncerca să potrivească ID-urile şi va eşua datorită ID-urilor traduse. split2po poate fi avertizat să nu verifice aceste ID-uri dacă este setată variabila de mediu REPORT_MISMATCHES=no. Linia de comandă va arăta īn felul următor:

    REPORT_MISMATCHES=no split2po TRADUS.xml ENGLEZA.xml >TRADUS.po
    

Un studiu detaliat al aplicaţiei split2po (conversia documentelor care nu sīnt sincronizate, de exemplu TRADUS.xml şi ENGLEZA.xml):

Un exemplu de mesaje al aplicaţiei "split2po" ar putea arăta īn felul următor:

id="knode-article-cleanup" not in the same paragraphs (245 vs 233)
id="anc-knode-article-cleanup" not in the same paragraphs (246 vs 0)
id="subscribing" not in the same paragraphs (269 vs 249)
id="anc-subscribing" not in the same paragraphs (270 vs 0)
id="fetch-group-list" not in the same paragraphs (271 vs 251)
id="fetch-and-read-news" not in the same paragraphs (251 vs 271)
id="anc-fetch-and-read-news" not in the same paragraphs (311 vs 0)
id="post-and-mail-news" not in the same paragraphs (390 vs 359)
id="anc-post-and-mail-news" not in the same paragraphs (391 vs 0)
id="more-knode-features" not in the same paragraphs (453 vs 417)
id="using-filters" not in the same paragraphs (454 vs 418)
id="anc-using-filters" not in the same paragraphs (455 vs 0)
id="knode-editor-advanced" not in the same paragraphs (463 vs 427)
id="anc-knode-editor-advanced" not in the same paragraphs (464 vs 0)
id="supersede-and-cancel" not in the same paragraphs (497 vs 459)
id="anc-supersede-and-cancel" not in the same paragraphs (498 vs 0)

Să privim īn detaliu:

id="knode-article-cleanup" not in the same paragraphs (245 vs 233)
īnseamnă că pīnă la ultima secţiune cu un ID (de obicei sect2, sect1, capitol, appendix), totul este īn regulă. Apoi au fost adăugate paragrafe adiţionale (o separare este făcută de obicei la tagurile <para>, <listitem> sau ceva asemănător). Deci aveţi 12 paragrafe adiţionale īn primul fişier (fişierul ENGLEZA.xml) care trebuie şterse pentru generarea fişierului PO. Faceţi o copie de siguranţă deoarece veţi scrie īnapoi aceste paragrafe prin crearea unui fişier POT şi apelīnd "msgmerge" pe fişierul PO generat. Astfel nu se pierde nimic.

Să privim cea de a doua linie:

id="anc-knode-article-cleanup" not in the same paragraphs (246 vs 0)

Ne spune că există un tag cu numele "id" īn primul fişier (ENGLEZA.xml), dar nu şi īn cel de-al doilea. Īn acest caz numele ne furnizează o indicaţie că acesta este id-ul unui tag "ancoră", care trebuie copiat īn al doilea fişier. Dacă identificatorul aparţine unui "chapter", "sect1" sau "sect2" de obicei īnseamnă că toată secţiunea nu face parte din al doilea fişier. De aici se poate concluziona că este necesar să ştergeţi toată secţiunea din primul fişier pentru a potrivi fişierele īntre ele.

Să luăm alt caz special:

id="fetch-group-list" not in the same paragraphs (271 vs 251)id="fetch-and-read-news" not in the same paragraphs (251 vs 271)
Aceste două secţiuni trebuie interschimbate īn al doilea fişier (TRADUS.xml).

Utilitare necesare pentru comparaţie:

Kate este foarte util pentru comparaţia a două fişiere. Se pot deschide cele două fişiere cu Kate şi să īmpărţiţi spaţiul de lucru īn două pe verticală, astfel īncīt să aveţi cele două fişiere unul sub celălalt. Īn plus, Kate are un mod de evidenţiere a codului XML, astfel īncīt se pot identifica uşor părţile care trebuie şterse.

Un utilitar care compară structura celor două fişiere XML este scriptul "sgmldiff", care produce o diferenţă structurală a celor două fişiere XML şi care ajută la identificarea locaţiei unde au fost adăugate sau şterse paragrafe. Mesajele afişate sīnt foarte detaliate după cum se poate observa. Majoritatea diferenţelor nu vor afecta procesul de conversie. Căutaţi īn special tagurile <PARA>.

Īn urma procesului de conversie obţineţi un fişier cu extensia PO.

Fişierul PO rezultat poate fi pus īn CVS şi īn timpul concatenării automate cu fişierul POT īn engleză, noile "msgid"-uri sīnt adăugate īn fişierul dumneavoastră PO. Prin urmare fişierul PO este sincronizat cu cel original. Noile mesaje vor fi apărea ca netraduse şi "fuzzy". Odată terminat procesul de conversie vă puteţi bucura de simplitatea noului format.