.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "PO4A.7 1" .TH PO4A.7 1 2025-11-22 "perl v5.42.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH NUME .IX Header "NUME" po4a \- cadru pentru traducerea documentației și a altor materiale .SH Introducere .IX Header "Introducere" po4a (PO pentru orice) facilitează întreținerea traducerii documentației utilizând instrumentele clasice gettext. Principala caracteristică a po4a este că decuplează traducerea conținutului de structura documentului său. .PP Acest document servește drept introducere la proiectul po4a, cu accent pe utilizatorii potențiali care se gândesc dacă să utilizeze acest instrument și pe cei curioși care doresc să înțeleagă de ce lucrurile sunt așa cum sunt. .SH "De ce po4a?" .IX Header "De ce po4a?" Filozofia software\-ului liber este de a face tehnologia cu adevărat disponibilă pentru toată lumea. Dar licențierea nu este singurul aspect de luat în considerare: software\-ul liber netradus este inutil pentru cei care nu vorbesc limba engleză. Prin urmare, mai avem încă ceva de lucru pentru a face software\-ul disponibil pentru toată lumea. .PP Această situație este bine înțeleasă de majoritatea proiectelor și toată lumea este acum convinsă de necesitatea de a traduce totul. Cu toate acestea, traducerile efective reprezintă un efort uriaș al multor persoane, paralizat de mici dificultăți tehnice. .PP Din fericire, software\-ul Open Source este de fapt foarte bine tradus cu ajutorul suitei de instrumente gettext. Aceste instrumente sunt utilizate pentru a extrage șirurile de caractere de tradus dintr\-un program și pentru a le prezenta într\-un format standardizat (denumit fișiere PO sau cataloage de traducere). Un întreg ecosistem de instrumente a apărut pentru a ajuta traducătorii să traducă efectiv aceste fișiere PO. Rezultatul este apoi utilizat de gettext în timpul execuției pentru a afișa mesaje traduse utilizatorilor finali. .PP Cu toate acestea, în ceea ce privește documentația, situația este încă oarecum dezamăgitoare. La început, traducerea documentației poate părea mai ușoară decât traducerea unui program, deoarece s\-ar părea că trebuie doar să copiați fișierul sursă al documentației și să începeți să traduceți conținutul. Cu toate acestea, atunci când documentația originală este modificată, urmărirea modificărilor se transformă rapid într\-un coșmar pentru traducători. Dacă este efectuată manual, această sarcină este neplăcută și predispusă la erori. .PP Traducerile învechite sunt adesea mai rele decât lipsa oricărei traduceri. Utilizatorii finali pot fi înșelați de documentația care descrie un comportament vechi al programului. În plus, aceștia nu pot interacționa direct cu cei care se ocupă de întreținere, deoarece nu vorbesc engleza. În plus, responsabilul cu întreținerea nu poate rezolva problema, deoarece nu cunoaște toate limbile în care este tradusă documentația sa. Aceste dificultăți, cauzate adesea de un instrumentar slab, pot submina motivația traducătorilor voluntari, agravând și mai mult problema. .PP \&\fBObiectivul proiectului po4a este de a ușura munca traducătorilor de documentație\fR. În special, acesta face traducerile de documentație \fIușor de întreținut\fR. .PP Ideea este de a reutiliza și adapta abordarea gettext la acest domeniu. Ca și în cazul gettext, textele sunt extrase din locațiile lor originale și prezentate traducătorilor sub formă de cataloage de traduceri PO. Traducătorii pot utiliza instrumentele clasice gettext pentru a monitoriza munca de făcut, a colabora și a se organiza ca echipe. po4a injectează apoi traducerile direct în structura documentației pentru a produce fișiere sursă traduse care pot fi prelucrate și distribuite la fel ca fișierele în limba engleză. Orice paragraf care nu este tradus este lăsat în limba engleză în documentul rezultat, asigurându\-se că utilizatorii finali nu văd niciodată o traducere învechită în documentație. .PP Acest lucru automatizează cea mai mare parte a muncii de întreținere a traducerii. Descoperirea paragrafelor care necesită o actualizare devine foarte ușoară, iar procesul este complet automatizat atunci când elementele sunt reordonate fără alte modificări. Verificarea specifică poate fi, de asemenea, utilizată pentru a reduce șansele de erori de formatare care ar conduce la un document defectuos. .PP Pentru o listă mai completă a avantajelor și dezavantajelor acestei abordări, consultați și secțiunea \fBÎntrebări și răspunsuri frecvente\fR de mai jos din acest document. .SS "Formatele acceptate" .IX Subsection "Formatele acceptate" În prezent, această abordare a fost implementată cu succes pentru mai multe tipuri de formate de formatare a textului: .IP "man (analizator matur)" 4 .IX Item "man (analizator matur)" Vechiul format de pagini de manual, folosit de atât de multe programe. Sprijinul po4a este foarte binevenit aici, deoarece acest format este oarecum dificil de utilizat și nu este foarte prietenos pentru începători. .Sp Modulul \fBLocale::Po4a::Man\fR\|(3pm) acceptă, de asemenea, formatul mdoc, utilizat de paginile man BSD (acestea sunt destul de comune și în Linux). .IP "AsciiDoc (analizator matur)" 4 .IX Item "AsciiDoc (analizator matur)" Acest format este un format de marcare simplificat menit să faciliteze crearea documentației. De exemplu, este utilizat pentru documentarea sistemului git. Aceste pagini de manual sunt traduse folosind po4a. .Sp Consultați Locale::Po4a::AsciiDoc pentru detalii. .IP "pod (analizator matur)" 4 .IX Item "pod (analizator matur)" Acesta este formatul documentației în linie Perl. Limbajul și extensiile în sine sunt documentate folosind acest format, în plus față de majoritatea scripturilor Perl existente. Acesta facilitează păstrarea documentației aproape de codul real prin încorporarea ambelor în același fișier. Face viața programatorului mai ușoară, dar, din păcate, nu și pe cea a traducătorului, până când nu utilizați po4a. .Sp Consultați Locale::Po4a::Pod pentru detalii. .IP "sgml (analizator matur)" 4 .IX Item "sgml (analizator matur)" Chiar dacă a fost înlocuit de XML în prezent, acest format este încă utilizat pentru documentele care au mai mult de câteva ecrane. Acesta poate fi utilizat chiar și pentru cărți complete. Actualizarea documentelor de această lungime poate fi foarte dificilă. \fBdiff\fR se dovedește adesea inutil atunci când textul original a fost reindentat după actualizare. Din fericire, po4a vă poate ajuta după acest proces. .Sp În prezent, numai DTD DebianDoc și DTD DocBook sunt acceptate, dar adăugarea suportului pentru unul nou este foarte ușoară. Este chiar posibil să utilizați po4a pe un DTD SGML necunoscut fără a modifica codul, furnizând informațiile necesare pe linia de comandă. Consultați \&\fBLocale::Po4a::Sgml\fR\|(3pm) pentru detalii. .IP "TeX / LaTeX (analizator matur)" 4 .IX Item "TeX / LaTeX (analizator matur)" Formatul LaTeX este un format important de documentație utilizat în lumea software\-ului liber și pentru publicații. .Sp Modulul \fBLocale::Po4a::LaTeX\fR\|(3pm) a fost testat cu documentația Python, o carte și câteva prezentări. .IP "text (analizator matur)" 4 .IX Item "text (analizator matur)" Formatul Text este formatul de bază pentru multe formate care includ blocuri lungi de text, inclusiv Markdown, fortunes, secțiunea de introducere YAML, debian/changelog și debian/control. .Sp Acesta acceptă formatul comun utilizat în generatoarele de situri statice, README\-uri și alte sisteme de documentare. Consultați \&\fBLocale::Po4a::Text\fR\|(3pm) pentru detalii. .IP "xml și XHMTL (probabil un analizator matur)" 4 .IX Item "xml și XHMTL (probabil un analizator matur)" Formatul XML este un format de bază pentru multe formate de documentație. .Sp În prezent, po4a acceptă DTD DocBook (consultați \&\fBLocale::Po4a::Docbook\fR\|(3pm) pentru detalii) și XHTML. .IP "BibTex (probabil un analizator matur)" 4 .IX Item "BibTex (probabil un analizator matur)" Formatul BibTex este utilizat împreună cu LaTex pentru formatarea listelor de referințe (bibliografii). .Sp Consultați Locale::Po4a::BibTex pentru detalii. .IP "Docbook (probabil un analizator matur)" 4 .IX Item "Docbook (probabil un analizator matur)" Un limbaj de marcare bazat pe XML care utilizează etichete semantice pentru a descrie documentele. .Sp Consultați Locale::Po4a:Docbook pentru informații mai detaliate. .IP "Guide XML (probabil un analizator matur)" 4 .IX Item "Guide XML (probabil un analizator matur)" Un format de documentație XML. Acest modul a fost dezvoltat special pentru a ajuta la susținerea și menținerea traducerilor documentației Gentoo Linux cel puțin până în martie 2016 (Conform datelor din situl Wayback Machine). De atunci, Gentoo a trecut la formatul DevBook XML. .Sp Consultați Locale::Po4a:Guide pentru informații mai detaliate. .IP "Wml (probabil un analizator matur)" 4 .IX Item "Wml (probabil un analizator matur)" Limbajul de marcare web, nu confundați WML cu WAP\-ul utilizat pe telefoanele mobile. Acest modul se bazează pe modulul Xhtml, care la rândul său se bazează pe modulul XmL. .Sp Consultați Locale::Po4a::Wml pentru informații mai detaliate. .IP "Yaml (probabil un analizator matur)" 4 .IX Item "Yaml (probabil un analizator matur)" Un superset strict al JSON. YAML este adesea utilizat ca sisteme sau proiecte de configurare. YAML se află la baza Ansible de la Red Hat. .Sp Consultați Locale::Po4a::Yaml pentru informații mai detaliate. .IP "RubyDoc (probabil un analizator matur)" 4 .IX Item "RubyDoc (probabil un analizator matur)" Formatul Ruby Document (RD), inițial formatul implicit de documentare pentru Ruby și proiectele Ruby înainte de a fi convertit în RDoc în 2002. Deși se pare că versiunea japoneză a manualului de referință Ruby încă utilizează RD. .Sp Consultați Locale::Po4a::RubyDoc pentru informații mai detaliate. .IP "Halibut (probabil un analizator într\-un stadiu experimental)" 4 .IX Item "Halibut (probabil un analizator într-un stadiu experimental)" Un sistem de producție a documentației, cu elemente similare TeX, debiandoc\-sgml, TeXinfo și altele, dezvoltat de Simon Tatham, dezvoltatorul PuTTY. .Sp Consultați Locale::Po4a:Halibut pentru informații mai detaliate. .IP "Ini (probabil un analizator într\-un stadiu experimental)" 4 .IX Item "Ini (probabil un analizator într-un stadiu experimental)" Format de fișier de configurare popularizat de MS\-DOS. .Sp Consultați Locale::Po4a::Ini pentru informații mai detaliate. .IP "texinfo (analizator într\-un stadiu foarte experimental)" 4 .IX Item "texinfo (analizator într-un stadiu foarte experimental)" Toată documentația GNU este scrisă în acest format (este chiar una dintre cerințele pentru a deveni un proiect GNU oficial). Suportul pentru \&\fBLocale::Po4a::Texinfo\fR\|(3pm) în po4a este încă la început. Vă rugăm să raportați erori și solicitări de caracteristici. .IP "gemtext (analizator într\-un stadiu foarte experimental)" 4 .IX Item "gemtext (analizator într-un stadiu foarte experimental)" Formatul nativ de text simplu al protocolului Gemini. Extensia \f(CW\*(C`.gmi\*(C'\fR este frecvent utilizată. Suportul pentru acest modul în po4a este încă în fază incipientă. Dacă găsiți ceva în neregulă, vă rugăm să depuneți un raport de eroare sau o cerere de caracteristică. .IP "org (analizator într\-un stadiu foarte experimental)" 4 .IX Item "org (analizator într-un stadiu foarte experimental)" Formatul de document utilizat de modul Org. Suportul pentru acest modul în po4a este încă în fază incipientă. Dacă găsiți ceva în neregulă, vă rugăm să depuneți un raport de eroare sau o cerere de caracteristică. .IP "vimhelp (analizator într\-un stadiu foarte experimental)" 4 .IX Item "vimhelp (analizator într-un stadiu foarte experimental)" Formatul utilizat pentru fișierele de ajutor Vim (și documentația unor module terțe). Suportul pentru acest format în po4a este încă în fază incipientă. Dacă găsiți ceva în neregulă, vă rugăm să depuneți un raport de eroare sau o cerere de caracteristică. .IP "simplepod (analizator într\-un stadiu foarte experimental)" 4 .IX Item "simplepod (analizator într-un stadiu foarte experimental)" Similar cu \fIpod\fR menționat anterior, acesta adoptă noul Pod::Simple ca analizator. Deoarece este nou creat, sunt de așteptat unele erori. Dacă observați vreun comportament ciudat, vă rugăm să ne anunțați. În cele din urmă, acest modul va înlocui \fIpod\fR. .IP "Alte formate acceptate" 4 .IX Item "Alte formate acceptate" Po4a poate gestiona și unele formate mai rare sau specializate, cum ar fi documentația opțiunilor de compilare pentru nucleele Linux 2.4+ (Locale::Po4a::KernelHelp) sau diagramele produse de instrumentul dia (Locale::Po4a::Dia). Adăugarea unui nou format este adesea foarte ușoară, iar sarcina principală este de a veni cu un analizator pentru formatul țintă. Consultați \fBLocale::Po4a::TransTractor\fR\|(3pm) pentru mai multe informații despre acest lucru. .IP "Formate neacceptate" 4 .IX Item "Formate neacceptate" Din păcate, po4a nu oferă încă suport pentru mai multe formate de documentație. Multe dintre acestea ar fi ușor de acceptat în po4a. Aceasta include formate care nu sunt utilizate doar pentru documentație, cum ar fi, descrieri de pachete (deb și rpm), întrebări privind scripturile de instalare a pachetelor, jurnale de modificări ale pachetelor și toate formatele de fișiere specializate utilizate de programe, cum ar fi scenariile de jocuri sau fișierele de resurse pentru «wine». .SH "Folosind po4a" .IX Header "Folosind po4a" Cel mai simplu mod de a utiliza acest instrument în proiectul dumneavoastră este să scrieți un fișier de configurare pentru programul \fBpo4a\fR și să interacționați numai cu acest program. Vă rugăm să consultați documentația acestuia, în \fBpo4a\fR\|(1). Restul acestei secțiuni oferă mai multe detalii pentru utilizatorii avansați ai po4a care doresc să își aprofundeze cunoștințele. .SS "Schema detaliată a fluxului de lucru po4a" .IX Subsection "Schema detaliată a fluxului de lucru po4a" Asigurați\-vă că citiți \fBpo4a\fR\|(1) înainte de această secțiune excesiv de detaliată pentru a obține o imagine de ansamblu simplificată a fluxului de lucru po4a. Reveniți aici când doriți să obțineți imaginea înfricoșătoare în ansamblu, cu aproape toate detaliile. .PP În următoarea schemă, \fIprincipal.doc\fR este un nume de exemplu pentru documentația care urmează să fie tradusă; \fIXX.doc\fR este același document tradus în limba XX, în timp ce \fIdoc.XX.po\fR este catalogul de traducere pentru documentul respectiv în limba XX. Autorii documentației vor fi preocupați în principal de \fIprincipal.doc\fR (care poate fi o pagină de manual, un document XML, un fișier AsciiDoc etc.); traducătorii vor fi preocupați în principal de fișierul PO, în timp ce utilizatorii finali vor vedea doar fișierul \fIXX.doc\fR. .PP Tranzițiile cu paranteze drepte precum \f(CW\*(C`[po4a actualizări po]\*(C'\fR reprezintă executarea unui instrument po4a, în timp ce tranzițiile cu acolade precum \&\f(CW\*(C`{actualizare de principal.doc}\*(C'\fR reprezintă o modificare manuală a fișierelor proiectului. .PP .Vb 10 \& principal.doc \& | \& V \& +<\-\-\-\-\-<\-\-\-\-+<\-\-\-\-\-<\-\-\-\-\-<\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\->\-\-\-\-\-\-\-\->\-\-\-\-\-\-\-+ \& : | | : \&{traducere} | {actualizare de principal.doc} : \& : | | : \& XX.doc | V V \& (opțional) | principal.doc \->\-\-\-\-\-\-\-\->\-\-\-\-\-\->+ \& : | (nou) | \& V V | | \& [po4a\-gettextize] doc.XX.po \-\->+ | | \& | (vechi) | | | \& | ^ V V | \& | | [po4a actualizează po] | \& V | | V \& traducere.pot ^ V | \& | | doc.XX.po | \& | | (trad. aprox. „fuzzy”) | \& {traducere} | | | \& | ^ V V \& | | {editare manuală} | \& | | | | \& V | V V \& doc.XX.po \-\-\->\-\-\-\->+<\-\-\-<\-\- doc.XX.po addendum master.doc \& (inițial) (actualizat) (opțional) (actualizat) \& : | | | \& : V | | \& +\-\-\-\-\->\-\-\-\-\->\-\-\-\-\->\-\-\-\-\-\-> + | | \& | | | \& V V V \& +\-\-\-\-\-\->\-\-\-\-\-+\-\-\-\-\-\-<\-\-\-\-\-\-+ \& | \& V \& [po4a actualizează traducerile] \& | \& V \& XX.doc \& (actualizat) .Ve .PP Din nou, această schemă este excesiv de complicată. Consultați \fBpo4a\fR\|(1) pentru o prezentare simplificată. .PP Partea din stânga descrie modul în care \fBpo4a\-gettextize\fR\|(1) poate fi utilizat pentru a converti un proiect de traducere existent la infrastructura po4a. Acest script ia un document original și omologul său tradus și încearcă să construiască fișierul PO corespunzător. O astfel de conversie manuală este destul de greoaie (consultați documentația \&\fBpo4a\-gettextize\fR\|(1) pentru mai multe detalii), dar este necesară o singură dată pentru a vă converti traducerile existente. Dacă nu aveți nicio traducere de convertit, puteți să uitați de acest lucru și să vă concentrați pe partea dreaptă a schemei. .PP În partea dreaptă sus, este descrisă acțiunea autorului original, care actualizează documentația. Partea din dreapta mijloc prezintă actualizările automate ale fișierelor de traducere: materialul nou este extras și comparat cu traducerea existentă. Traducerea anterioară este utilizată pentru părțile care nu s\-au schimbat, în timp ce părțile parțial modificate sunt conectate la traducerea anterioară cu un marcaj „fuzzy” (traducere aproximativă) care indică faptul că traducerea trebuie actualizată. Materialele noi sau puternic modificate sunt lăsate netraduse. .PP Apoi, blocul \fIeditare manuală\fR descrie acțiunea traducătorilor, care modifică fișierele PO pentru a furniza traduceri pentru fiecare șir și paragraf original. Acest lucru se poate face fie utilizând un editor specific, cum ar fi \fBGTranslator\fR, \fBLokalize\fR de la KDE sau \fBpoedit\fR, fie utilizând o platformă de localizare din Internet, cum ar fi \fBweblate\fR sau \&\fBpootle\fR. Rezultatul traducerii este un set de fișiere PO, unul pentru fiecare limbă. Vă rugăm să consultați documentația gettext pentru mai multe detalii. .PP Partea de jos a figurii arată cum \fBpo4a\fR creează un document sursă tradus din documentul original \fIprincipal.doc\fR și catalogul de traduceri \&\fIdoc.XX.po\fR care a fost actualizat de traducători. Structura documentului este reutilizată, în timp ce conținutul original este înlocuit cu omologul său tradus. Opțional, un addendum poate fi utilizat pentru a adăuga text suplimentar la traducere. Acesta este adesea utilizat pentru a adăuga numele traducătorului la documentul final. A se vedea mai jos pentru detalii. .PP La invocare, \fBpo4a\fR actualizează automat atât fișierele de traducere, cât și fișierele de documentație traduse. .SS "Începerea unui nou proiect de traducere" .IX Subsection "Începerea unui nou proiect de traducere" Dacă începeți de la zero, trebuie doar să scrieți un fișier de configurare pentru po4a și ați terminat. Șabloanele relevante sunt create pentru fișierele lipsă, permițând colaboratorilor dvs. să traducă proiectul dvs. în limba lor. Vă rugăm să consultați \fBpo4a\fR\|(1) pentru un tutorial de pornire rapidă și pentru toate detaliile. .PP Dacă aveți o traducere existentă, adică un fișier de documentație care a fost tradus manual, puteți integra conținutul său în fluxul de lucru po4a utilizând \fBpo4a\-gettextize\fR. Această sarcină este un pic greoaie (așa cum este descris în pagina de manual a instrumentului), dar odată ce proiectul dvs. este convertit în fluxul de lucru po4a, totul va fi actualizat automat. .SS "Actualizarea traducerilor și a documentelor" .IX Subsection "Actualizarea traducerilor și a documentelor" Odată configurat, invocarea \fBpo4a\fR este suficientă pentru a actualiza atât fișierele PO de traducere, cât și documentele traduse. Puteți trece \&\f(CW\*(C`\-\-no\-translations\*(C'\fR la \fBpo4a\fR pentru a nu actualiza traducerile (actualizând astfel doar fișierele PO) sau \f(CW\*(C`\-\-no\-update\*(C'\fR pentru a nu actualiza fișierele PO (actualizând astfel doar traducerile). Aceasta corespunde aproximativ scripturilor individuale \fBpo4a\-updatepo\fR și \&\fBpo4a\-translate\fR care sunt acum depreciate (a se vedea „De ce sunt depreciate scripturile individuale?” în secțiunea de mai jos). .SS "CUM se utilizează addenda pentru a adăuga text suplimentar la traduceri" .IX Subsection "CUM se utilizează addenda pentru a adăuga text suplimentar la traduceri" Adăugarea de text nou la traducere este probabil singurul lucru care este mai ușor pe termen lung atunci când traduceți manual fișiere :). Acest lucru se întâmplă atunci când doriți să adăugați o secțiune suplimentară la documentul tradus, care nu corespunde niciunui conținut din documentul original. Cazul clasic de utilizare este de a acorda credite (mulțumiri, recunoașterea muncii depuse, ș.a.) echipei de traducere și de a indica modul de raportare a problemelor specifice traducerii. .PP Cu po4a, trebuie să specificați fișiere \fBaddendum\fR, care pot fi privite conceptual ca plasturi (patches) aplicați documentului localizat(tradus) după procesare. Fiecare addendum trebuie să fie furnizat ca fișier separat, al cărui format este totuși foarte diferit de cel al plasturilor clasice. Prima linie este o \fIlinie de antet\fR, care definește punctul de inserție al addendumului (cu o sintaxă din păcate criptică \- a se vedea mai jos), în timp ce restul fișierului este adăugat textual la poziția stabilită. .PP Linia de antet trebuie să înceapă cu șirul \fBPO4A\-HEADER:\fR, urmat de o listă de câmpuri \fIcheie\fR\fB=\fR\fIvaloare\fR separate prin punct și virgulă. .PP De exemplu, următorul antet declară un addendum care trebuie plasat chiar la sfârșitul traducerii. .PP .Vb 1 \& PO4A\-HEADER: mode=eof .Ve .PP Lucrurile sunt mai complexe atunci când doriți să adăugați conținut suplimentar în mijlocul documentului. Următorul antet declară un addendum care trebuie plasat după secțiunea XML care conține șirul \f(CW\*(C`Despre acest document\*(C'\fR în traducere. .PP .Vb 1 \& PO4A\-HEADER: position=Despre acest document; mode=after; endboundary= .Ve .PP În practică, atunci când încearcă să aplice un addendum, po4a caută prima linie care corespunde argumentului \f(CW\*(C`poziție\*(C'\fR (acesta poate fi o expresie regulată „expreg”). Nu uitați că po4a ia în considerare aici documentul \&\fBtradus\fR. Această documentație este în limba engleză, dar linia dvs. ar trebui probabil să sune după cum urmează dacă intenționați ca addendumul dvs. să se aplice traducerii în franceză a documentului. .PP .Vb 1 \& PO4A\-HEADER: position=À propos de ce document; mode=after; endboundary= .Ve .PP Odată ce \f(CW\*(C`poziția\*(C'\fR este găsită în documentul țintă, po4a caută următoarea linie după \f(CW\*(C`poziția\*(C'\fR care corespunde \f(CW\*(C`endboundary\*(C'\fR furnizată. Addendumul este adăugat chiar \fBdupă\fR acea linie (deoarece am furnizat un \&\fIendboundary\fR, adică o limită care încheie secțiunea curentă). .PP Exact același efect ar putea fi obținut cu următorul antet, care este echivalent: .PP .Vb 1 \& PO4A\-HEADER: position=Despre acest document; mode=after; beginboundary=
.Ve .PP Aici, po4a caută prima linie care corespunde \f(CW\*(C`
\*(C'\fR după linia care corespunde \f(CW\*(C`About this document\*(C'\fR din traducere și adaugă addendumul \&\fBînainte\fR de această linie, deoarece am furnizat un \fIbeginboundary\fR, adică o limită care marchează începutul secțiunii următoare. Așadar, această linie de antet necesită plasarea addendumului după secțiunea care conține \f(CW\*(C`About this document\*(C'\fR, și să instruim po4a că o secțiune începe cu o linie care conține eticheta \f(CW\*(C`
\*(C'\fR. Acest lucru este echivalent cu exemplul anterior, deoarece ceea ce doriți cu adevărat este să adăugați acest addendum fie după \f(CW\*(C`
\*(C'\fR, fie înainte de \f(CW\*(C`
\*(C'\fR. .PP De asemenea, puteți stabili inserția \fImod\fR la valoarea \f(CW\*(C`before\*(C'\fR, cu o semantică similară: combinarea \f(CW\*(C`mode=before\*(C'\fR cu un \f(CW\*(C`endboundary\*(C'\fR va plasa addendum\-ul chiar \fBafter\fR (după) limita care corespunde, adică ultima linie de limită potențială înainte de \f(CW\*(C`position\*(C'\fR. Combinarea \f(CW\*(C`mode=before\*(C'\fR cu un \&\f(CW\*(C`beginboundary\*(C'\fR va plasa addendumul chiar \fBbefore\fR (înainte) față de limita corespunzătoare, adică ultima linie de limită potențială înainte de \&\f(CW\*(C`position\*(C'\fR. .PP .Vb 7 \& Mod | Tipul de limită | Limita utilizată | Punctul de inserție în raport cu limita \& ========|=================|==============================|========================================= \& \*(Aqbefore\*(Aq| \*(Aqendboundary\*(Aq | ultima înainte de \*(Aqposition\*(Aq | Imediat după limita selectată \& \*(Aqbefore\*(Aq| \*(Aqbeginboundary\*(Aq | ultima înainte de \*(Aqposition\*(Aq | Chiar înainte de limita selectată \& \*(Aqafter\*(Aq | \*(Aqendboundary\*(Aq | prima după \*(Aqposition\*(Aq | Imediat după limita selectată \& \*(Aqafter\*(Aq | \*(Aqbeginboundary\*(Aq | prima după \*(Aqposition\*(Aq | Chiar înainte de limita selectată \& \*(Aqeof\*(Aq | (niciunul) | nedeclarată | Sfârșitul fișierului .Ve .PP \fISfaturi și trucuri despre addenda\fR .IX Subsection "Sfaturi și trucuri despre addenda" .IP \(bu 4 Amintiți\-vă că acestea sunt expresii regulate. De exemplu, dacă doriți să potriviți sfârșitul unei secțiuni nroff care se termină cu linia \f(CW\*(C`.fi\*(C'\fR, nu utilizați \f(CW\*(C`.fi\*(C'\fR ca \fBendboundary\fR, deoarece se va potrivi cu \f(CW\*(C`the[ fi]le\*(C'\fR, ceea ce evident nu este ceea ce vă așteptați. \fBendboundary\fR corect în acest caz este: \f(CW\*(C`^\e.fi$\*(C'\fR. .IP \(bu 4 Spațiile albe SUNT importante în conținutul poziției \f(CW\*(C`position\*(C'\fR și al limitelor. Astfel, cele două linii următoare \fBsunt diferite\fR. Cea de\-a doua va fi găsită numai dacă există suficiente spații la final în documentul tradus. .Sp .Vb 2 \& PO4A\-HEADER: position=Despre acest document; mode=after; beginboundary=
\& PO4A\-HEADER: position=Despre acest document ; mode=after; beginboundary=
.Ve .IP \(bu 4 Deși se poate considera că această căutare contextuală operează aproximativ pe fiecare linie a documentului \fBtradus\fR, ea operează de fapt pe șirul intern de date al documentului tradus. Acest șir de date interne poate fi un text care se întinde pe un paragraf conținând mai multe linii sau poate fi doar o etichetă XML. \fIpunctul de inserție\fR exact al addendumului trebuie să fie înainte sau după șirul intern de date și nu poate fi în interiorul șirului intern de date. .IP \(bu 4 Treceți argumentul \f(CW\*(C`\-vv\*(C'\fR la \fBpo4a\fR pentru a înțelege cum sunt adăugate addendele la traducere. De asemenea, poate fi util să rulați \fBpo4a\fR în modul de depanare pentru a vedea șirul de date interne reale atunci când addendumul dvs. nu se aplică. .PP \fIExemple de addenda\fR .IX Subsection "Exemple de addenda" .IP \(bu 4 Dacă doriți să adăugați ceva după următoarea secțiune nroff: .Sp .Vb 1 \& .SH "AUTHORS" .Ve .Sp Ar trebui să selectați o abordare în doi pași prin definirea \&\fBmode=after\fR. Apoi ar trebui să restrângeți căutarea la linia de după \&\fBAUTHORS\fR cu expresia regulată a argumentului \fBposition\fR. Apoi, ar trebui să potriviți începutul următoarei secțiuni (și anume, \fB^\e.SH\fR) cu expresia regulată a argumentului \fBbeginboundary\fR. Adică: .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=AUTHORS;beginboundary=\e.SH .Ve .IP \(bu 4 Dacă doriți să adăugați ceva imediat după o anumită linie (de exemplu, după linia „Drepturi de autor Băiat Deștept”), utilizați un argument \fBposition\fR care corespunde acestei linii, definiți \fBmode=after\fR și dați un \&\fBbeginboundary\fR care corespunde oricărei linii. .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=Drepturi de autor Băiat Deștept, 2004;beginboundary=^ .Ve .IP \(bu 4 Dacă doriți să adăugați ceva la sfârșitul documentului, dați un argument \&\fBposition\fR care să corespundă oricărei linii din document (dar numai unei linii. Po4a nu va continua dacă nu este unic) și dați un argument \&\fBendboundary\fR care să nu se potrivească cu nimic. Nu folosiți aici șiruri simple precum \fB"EOF"\fR, ci preferați\-le pe cele care au mai puține șanse să se afle în documentul dumneavoastră. .Sp .Vb 1 \& PO4A\-HEADER:mode=after;position=Despre acest document;beginboundary=FakePo4aBoundary .Ve .PP \fIUn exemplu mai detaliat\fR .IX Subsection "Un exemplu mai detaliat" .PP Documentul original (formatat POD): .PP .Vb 7 \& |=head1 NUME \& | \& |fantoma \- un program fictiv \& | \& |=head1 AUTHOR \& | \& |eu_însămi .Ve .PP Apoi, următorul addendum va asigura adăugarea unei secțiuni (în franceză) despre traducător la sfârșitul dosarului (în franceză, „TRADUCTEUR” înseamnă „TRADUCĂTOR”, iar „moi” înseamnă „eu”). .PP .Vb 6 \& |PO4A\-HEADER:mode=after;position=AUTOR;beginboundary=^=head \& | \& |=head1 TRADUCĂTOR \& | \& |eu_însămi \& | .Ve .PP Pentru a plasa addendumul înainte de AUTOR, utilizați următorul antet: .PP .Vb 1 \& PO4A\-HEADER:mode=after;position=NOM;beginboundary=^=head1 .Ve .PP Acest lucru funcționează deoarece următoarea linie care se potrivește cu \&\fBbeginboundary\fR \f(CW\*(C`/^=head1/\*(C'\fR după secțiunea „NAME” (tradusă prin „NOM” în franceză), este cea care declară autorii. Deci, addendumul va fi pus între cele două secțiuni. Rețineți că, dacă ulterior se adaugă o altă secțiune între secțiunile „NAME” și „AUTHOR”, po4a va plasa în mod eronat addenda înaintea noii secțiuni. .PP Pentru a evita acest lucru, puteți realiza același lucru folosind \&\fBmode\fR=\fIbefore\fR: .PP .Vb 1 \& PO4A\-HEADER:mode=before;position=^=head1 AUTOR .Ve .SH "Cum funcționează acesta?" .IX Header "Cum funcționează acesta?" Acest capitol vă oferă o scurtă prezentare generală a componentelor interne ale po4a, astfel încât să vă simțiți mai încrezători și să ne ajutați să îl menținem și să îl îmbunătățim. De asemenea, vă poate ajuta să înțelegeți de ce nu face ceea ce vă așteptați și cum să soluționați problemele ce pot apărea. .SS "TransTractors și arhitectura proiectului" .IX Subsection "TransTractors și arhitectura proiectului" La baza proiectului po4a, clasa \&\fBLocale::Po4a::TransTractor\fR\|(3pm) este strămoșul comun al tuturor analizatorilor po4a. Acest nume ciudat provine din faptul că se ocupă în același timp de traducerea documentelor și de extragerea șirurilor de caractere. .PP Mai formal, acesta ia un document de tradus plus un fișier PO care conține traducerile de utilizat ca intrare, producând în același timp două rezultate separate: un alt fișier PO (rezultat din extragerea șirurilor traductibile din documentul de intrare) și un document tradus (cu aceeași structură ca cel de intrare, dar cu toate șirurile traductibile înlocuite cu conținutul PO de intrare). Iată o reprezentare grafică a acestui lucru: .PP .Vb 6 \& Document intrare \-\-\e /\-\-\-> Document ieșire \& \e TransTractor:: / (tradus) \& +\-\->\-\- parse() \-\-\-\-\-\-\-\-+ \& / \e \& PO intrare \-\-\-\-\-\-\-\-/ \e\-\-\-> PO ieșire \& (extras) .Ve .PP Acest mic os este nucleul întregii arhitecturi „scheletului” po4a. Dacă furnizați ambele documente de intrare și nu țineți cont de PO de ieșire, obțineți \fBpo4a\-translate\fR. Dacă în schimb desconsiderați documentul de ieșire, obțineți \fBpo4a\-updatepo\fR. \fBpo4a\fR utilizează un prim TransTractor pentru a obține un fișier POT de ieșire actualizat (fără a ține cont de documentele de ieșire), apelează la \fBmsgmerge \-U\fR pentru a actualiza fișierele PO de traducere de pe disc și construiește un al doilea TransTractor cu aceste fișiere PO actualizate pentru a actualiza documentele de ieșire. Pe scurt, \fBpo4a\fR oferă o soluție unică pentru a actualiza ceea ce este necesar, utilizând un singur fișier de configurare. .PP \&\fBpo4a\-gettextize\fR utilizează, de asemenea, două TransTractors, dar într\-un alt mod: Construiește un TransTractor pentru fiecare limbă, iar apoi construiește un nou fișier PO folosind msgids din documentul original ca msgids și msgids din documentul tradus ca msgstrs. Este nevoie de multă atenție pentru a se asigura că șirurile potrivite în acest mod corespund într\-adevăr, după cum se descrie în \fBpo4a\-gettextize\fR\|(1). .SS "Analizatori specifici formatului" .IX Subsection "Analizatori specifici formatului" Toți analizatorii de format po4a sunt implementați pe partea de sus a TransTractor. Unii dintre ei sunt foarte simpli, cum ar fi cei Text, Markdown și AsciiDoc. Aceștia încarcă liniile una câte una folosind \&\f(CWTransTractor::shiftline()\fR, acumulează conținutul paragrafelor sau orice altceva. Odată ce un șir de caractere este complet analizat, analizatorul utilizează \f(CWTransTractor::translate()\fR pentru (1) a adăuga acest șir la fișierul PO de ieșire și (2) pentru a obține traducerea din fișierul PO de intrare. Analizatorul apoi introduce rezultatul în fișierul de ieșire utilizând \f(CWTransTractor::pushline()\fR. .PP Alți analizatori sunt mai complecși deoarece se bazează pe un analizator extern pentru a analiza documentul de intrare. Analizatorii Xml, HTML, SGML și Pod sunt construiți pe baza analizatorilor SAX. Aceștia declară reapeluri la evenimente precum „Am găsit un titlu nou al cărui conținut este următorul” pentru a actualiza documentul de ieșire și fișierele POT de ieșire în funcție de conținutul de intrare utilizând \&\f(CWTransTractor::translate()\fR și \f(CWTransTractor::pushline()\fR. Analizatorul Yaml este similar, dar diferit: acesta serializează o structură de date produsă de analizatorul YAML::Tiny. Acesta este motivul pentru care modulul Yaml din po4a nu reușește să declare liniile de referință: locația fiecărui șir de caractere din fișierul de intrare nu este păstrată de analizator, astfel încât nu putem furniza decât „$filename:1” ca locație a șirului. Analizatorii orientați pe SAX utilizează caractere joker și alte trucuri pentru a salva numele fișierului și numerele de linie ale referințelor. .PP O problemă specifică provine din codificarea fișierelor și marcatorii BOM. Analizatorii simpli pot uita de această problemă, care este tratată de \&\f(CWTransTractor::read()\fR (utilizat intern pentru a obține liniile unui document de intrare), dar modulele care se bazează pe un analizator extern trebuie să se asigure că toate fișierele sunt citite cu un strat de decodificare PerlIO adecvat. Cel mai simplu este să deschideți chiar dvs. fișierul și să furnizați un identificator de fișier sau direct șirul complet analizatorului dvs. extern. Consultați \f(CWPod::read()\fR și \&\f(CWPod::parse()\fR pentru un exemplu. Conținutul citit de TransTractor este ignorat, dar un identificator de fișier nou este transmis analizatorului extern. Partea importantă este modul \f(CW"<:encoding($charset)"\fR care este transmis funcției perl \fBopen()\fR. .SS "Obiecte PO" .IX Subsection "Obiecte PO" Clasa \fBLocale::Po4a::Po\fR\|(3pm) este responsabilă de încărcarea și utilizarea fișierelor PO și POT. Practic, puteți citi un fișier, adăuga intrări, obține traduceri cu metoda \fBgettext()\fR, scrie PO într\-un fișier. Funcțiile mai avansate, cum ar fi fuzionarea unui fișier PO cu un fișier POT sau validarea unui fișier, sunt delegate către \fBmsgmerge\fR și, respectiv, \fBmsgfmt\fR. .SS "Contribuind la po4a" .IX Subsection "Contribuind la po4a" Chiar dacă nu ați contribuit niciodată în trecut la vreun proiect Open Source, sunteți binevenit: suntem dispuși să vă ajutăm și să vă îndrumăm aici. po4a este cel mai bine întreținut de utilizatorii săi în zilele noastre. Deoarece nu dispunem de personal, încercăm să facem proiectul primitor prin îmbunătățirea documentației și a testelor automate pentru a vă face încrezători în contribuția la proiect. Vă rugăm să consultați fișierul CONTRIBUTING.md pentru mai multe detalii. .SH "Proiecte cu cod\-sursă deschis „open\-source” care utilizează po4a" .IX Header "Proiecte cu cod-sursă deschis „open-source” care utilizează po4a" Iată o listă foarte parțială a proiectelor care utilizează po4a în producție pentru documentația lor. Dacă doriți să vă adăugați proiectul la listă, trimiteți\-ne un e\-mail (sau o cerere de îmbinare „merge request”). .IP \(bu 4 adduser (man): instrument de gestionare a utilizatorilor și a grupurilor. .IP \(bu 4 apt (man, docbook): Gestionarul de pachete Debian. .IP \(bu 4 aptitude (docbook, svg): gestionar de pachete bazat pe terminal pentru Debian .IP \(bu 4 F\-Droid website (markdown): catalog instalabil de aplicații de software liber și cod\-sursă deschis („Free and Open Source Software”: FOSS) pentru platforma Android. .IP \(bu 4 git (asciidoc): sistem distribuit de control al versiunilor pentru urmărirea modificărilor în codul sursă. .IP \(bu 4 Linux manpages (pagini de manual) .Sp Acest proiect oferă o infrastructură pentru traducerea multor pagini de manual în diferite limbi, gata de integrare în câteva distribuții majore (Arch Linux, Debian, Fedora, Mageia, openSUSE și derivatele acestora). .IP \(bu 4 Stellarium (HTML): un planetariu cu cod\-sursă deschis, gratuit pentru calculatorul dumneavoastră. po4a este utilizat pentru a traduce descrierile obiectelor cerești. .IP \(bu 4 Jamulus (markdown, yaml, HTML): o aplicație FOSS pentru bruiaj în linie în timp real. Documentația sitului web este menținută în mai multe limbi utilizând po4a. .IP \(bu 4 Alt element de rezolvat: .SH "Întrebări și răspunsuri frecvente" .IX Header "Întrebări și răspunsuri frecvente" .SS "Cum se pronunță po4a?" .IX Subsection "Cum se pronunță po4a?" Eu personal o vocalizez ca pouah , care este o onomatopee franceză pe care o folosim în loc de expresie de dezgust :) Poate că am un simț al umorului ciudat :) .SS "De ce sunt depreciate scripturile individuale?" .IX Subsection "De ce sunt depreciate scripturile individuale?" Într\-adevăr, \fBpo4a\-updatepo\fR și \fBpo4a\-translate\fR sunt depreciate în favoarea lui \fBpo4a\fR. Motivul este că, deși \fBpo4a\fR poate fi utilizat ca înlocuitor al acestor scripturi, există destul de multe duplicații de cod aici. Scripturile individuale au în jur de 150 de linii de cod, în timp ce programul \fBpo4a\fR are 1200 de linii, astfel încât acestea fac multe lucruri în plus față de elementele interne comune. Duplicarea codului duce la apariția unor erori în ambele versiuni și la necesitatea a două remedieri. Un exemplu de astfel de duplicare sunt bug\-urile #1022216 din Debian și problema #442 din GitHub care au avut exact același remediu, dar unul în \fBpo4a\fR și celălalt \fBpo4a\-updatepo\fR. .PP Pe termen lung, aș dori să renunț la scripturile individuale și să mențin o singură versiune a acestui cod. Lucrul sigur este că scripturile individuale nu vor mai fi îmbunătățite, astfel încât doar \fBpo4a\fR va beneficia de noile caracteristici. Acestea fiind spuse, nu există nicio urgență de depreciere. Intenționez să păstrez scripturile individuale cât de mult posibil și cel puțin până în 2030. Dacă proiectul dvs. utilizează încă \&\fBpo4a\-updatepo\fR și \fBpo4a\-translate\fR în 2030, s\-ar putea să aveți o problemă. .PP De asemenea, am putea elimina deprecierea acestor scripturi la un moment dat, dacă o refactorizare reduce duplicarea codului la zero. Dacă aveți o idee (sau mai bine: un plasture „patch” :)), ajutorul dvs. este binevenit. .SS "Ce se întâmplă cu celelalte instrumente de traducere pentru documentație care utilizează gettext?" .IX Subsection "Ce se întâmplă cu celelalte instrumente de traducere pentru documentație care utilizează gettext?" Există câteva dintre ele. Iată o listă posibil incompletă, și multe alte instrumente apar la orizont. .IP \fBpoxml\fR 4 .IX Item "poxml" Acesta este instrumentul dezvoltat de cei de la KDE pentru a gestiona DocBook XML. AFAIK, a fost primul program care a extras șiruri de caractere pentru a le traduce din documentație în fișiere PO și le\-a injectat înapoi după traducere. .Sp Poate gestiona doar XML și doar un anumit DTD. Sunt destul de nemulțumit de gestionarea listelor, care se termină cu un msgid mare. Când lista devine mare, fragmentul devine mai greu de înghițit. .IP \fBpo\-debiandoc\fR 4 .IX Item "po-debiandoc" Acest program realizat de Denis Barbier este un fel de precursor al modulului SGML po4a, care îl depreciază mai mult sau mai puțin. După cum spune și numele, acesta gestionează doar DTD\-ul DebianDoc, care este mai mult sau mai puțin un DTD depreciat. .IP \fBxml2po.py\fR 4 .IX Item "xml2po.py" Folosit de echipa de documentare GIMP din 2004, funcționează destul de bine, chiar dacă, după cum sugerează și numele, funcționează doar cu fișiere XML și are nevoie de fișiere makefile configurate special. .IP \fBSphinx\fR 4 .IX Item "Sphinx" Proiectul de documentare Sphinx utilizează, de asemenea, gettext în mod extensiv pentru a\-și gestiona traducerile. Din păcate, acesta funcționează doar pentru câteva formate de text, rest și markdown, deși este probabil singurul instrument care gestionează întregul proces de traducere. .PP Principalele avantaje ale po4a față de acestea sunt ușurința de a adăuga conținut suplimentar (care este chiar mai rău acolo) și capacitatea de a realiza gettextizarea. .SS "REZUMAT al avantajelor abordării bazate pe gettext" .IX Subsection "REZUMAT al avantajelor abordării bazate pe gettext" .IP \(bu 2 Traducerile nu sunt stocate împreună cu originalul, ceea ce face posibilă detectarea dacă traducerile devin neactualizate. .IP \(bu 2 Traducerile sunt stocate în fișiere separate unele de altele, ceea ce previne interferența între traducătorii din limbi diferite, atât atunci când își trimit modificările, cât și la nivelul codificării fișierelor. .IP \(bu 2 Acesta se bazează intern pe \fBgettext\fR (dar \fBpo4a\fR oferă o interfață foarte simplă, astfel încât nu trebuie să înțelegeți elementele interne pentru a\-l utiliza). În acest fel, nu trebuie să reinventăm roata și, datorită utilizării lor pe scară largă, putem crede că aceste instrumente sunt mai mult sau mai puțin lipsite de erori. .IP \(bu 2 Nu s\-a schimbat nimic pentru utilizatorul final (în afară de faptul că traducerile vor fi, sperăm, mai bine întreținute). Fișierul de documentație rezultat distribuit este exact același. .IP \(bu 2 Nu este nevoie ca traducătorii să învețe o nouă sintaxă de fișier, iar editorul lor preferat de fișiere PO (cum ar fi modul PO din Emacs, Lokalize sau Gtranslator) va funcționa foarte bine. .IP \(bu 2 gettext oferă o modalitate simplă de a obține statistici despre ceea ce este făcut, ceea ce ar trebui revizuit și actualizat și ceea ce mai este de făcut. Unele exemple pot fi găsite la aceste adrese: .Sp .Vb 2 \& \- https://docs.kde.org/stable5/en/kdesdk/lokalize/project\-view.html \& \- http://www.debian.org/intl/l10n/ .Ve .PP Dar nu totul este „în roz”, iar această abordare are și unele dezavantaje cu care trebuie să ne confruntăm. .IP \(bu 2 Addenda este oarecum ciudată la prima vedere. .IP \(bu 2 Nu puteți adapta textul tradus la preferințele dvs., cum ar fi divizarea unui paragraf aici și unirea altor două acolo. Dar, într\-un anumit sens, dacă există o problemă cu originalul, aceasta ar trebui oricum raportată ca eroare. .IP \(bu 2 Chiar și cu o interfață ușoară, acesta rămâne un instrument nou pe care oamenii trebuie să îl învețe. .Sp Unul dintre visele mele ar fi să integrez cumva po4a la Gtranslator sau Lokalize. Când se deschide un fișier de documentație, șirurile de caractere sunt extrase automat, iar un fișier tradus + fișier po poate fi scris pe disc. Dacă reușim să facem un modul MS Word (TM) (sau cel puțin RTF), traducătorii profesioniști ar putea chiar să\-l folosească. .SH "CONSULTAȚI ȘI" .IX Header "CONSULTAȚI ȘI" .IP \(bu 4 Documentația instrumentului „totul în unul” pe care ar trebui să o utilizați: \fBpo4a\fR\|(1) ;). .IP \(bu 4 Documentația scripturilor individuale po4a: \fBpo4a\-gettextize\fR\|(1), \&\fBpo4a\-updatepo\fR\|(1), \fBpo4a\-translate\fR\|(1), \fBpo4a\-normalize\fR\|(1). .IP \(bu 4 Scripturile de ajutor suplimentare: \fBmsguntypot\fR\|(1), \&\fBpo4a\-display\-man\fR\|(1), \fBpo4a\-display\-pod\fR\|(1). .IP \(bu 4 Analizatorii fiecărui format, în special pentru a vedea opțiunile acceptate de fiecare dintre ei: \fBLocale::Po4a::AsciiDoc\fR\|(3pm) \&\fBLocale::Po4a::Dia\fR\|(3pm), \fBLocale::Po4a::Gemtext\fR\|(3pm), \&\fBLocale::Po4a::Guide\fR\|(3pm), \fBLocale::Po4a::Ini\fR\|(3pm), \&\fBLocale::Po4a::KernelHelp\fR\|(3pm), \fBLocale::Po4a::Man\fR\|(3pm), \&\fBLocale::Po4a::RubyDoc\fR\|(3pm), \fBLocale::Po4a::Texinfo\fR\|(3pm), \&\fBLocale::Po4a::Text\fR\|(3pm), \fBLocale::Po4a::Xhtml\fR\|(3pm), \&\fBLocale::Po4a::Yaml\fR\|(3pm), \fBLocale::Po4a::BibTeX\fR\|(3pm), \&\fBLocale::Po4a::Docbook\fR\|(3pm), \fBLocale::Po4a::Halibut\fR\|(3pm), \&\fBLocale::Po4a::LaTeX\fR\|(3pm), \fBLocale::Po4a::Org\fR\|(3pm), \&\fBLocale::Po4a::Pod\fR\|(3pm), \fBLocale::Po4a::SimplePod\fR\|(3pm), \&\fBLocale::Po4a::Sgml\fR\|(3pm), \fBLocale::Po4a::TeX\fR\|(3pm), Locale::Po4a::VimHelp, \fBLocale::Po4a::Wml\fR\|(3pm), \&\fBLocale::Po4a::Xml\fR\|(3pm). .IP \(bu 4 Implementarea infrastructurii de bază: \fBLocale::Po4a::TransTractor\fR\|(3pm) (deosebit de important pentru a înțelege organizarea codului), \&\fBLocale::Po4a::Chooser\fR\|(3pm), \fBLocale::Po4a::Po\fR\|(3pm), \&\fBLocale::Po4a::Common\fR\|(3pm). Vă rugăm să verificați și fișierul \&\fICONTRIBUTING.md\fR din arborele codului sursă. .SH AUTORI .IX Header "AUTORI" .Vb 2 \& Denis Barbier \& Martin Quinson (mquinson#debian.org) .Ve