Scroll to navigation

LOCALE::PO4A::SGML.3PM(1) User Contributed Perl Documentation LOCALE::PO4A::SGML.3PM(1)

NUME

Locale::Po4a::Sgml - convertește documente SGML din/în fișiere PO

DESCRIERE

Scopul proiectului po4a (PO pentru orice) este de a ușura traducerile (și mai interesant, întreținerea traducerilor) folosind instrumente gettext în domenii în care nu erau așteptate, cum ar fi documentația.

Locale::Po4a::Sgml este un modul care ajută la traducerea documentației în format SGML în alte limbi [umane].

Acest modul utilizează onsgmls(1) pentru a analiza fișierele SGML. Asigurați-vă că acesta este instalat. De asemenea, asigurați-vă că DTD-ul fișierelor SGML este instalat în sistem.

OPȚIUNI ACCEPTATE DE ACEST MODUL

Listă de cuvinte cheie separate prin spații care indică categoria de mesaje suplimentare de depanare care ar trebui afișate. Valorile posibile sunt: "entities", "generic", "onsgml", "refs" și "tag".
Oferă mai multe informații despre ceea ce se întâmplă.
Listă separată prin spații de etichete suplimentare (pe lângă cele furnizate de DTD) al căror conținut ar trebui să formeze un msgid suplimentar, adică care ar trebui tradus.
Listă separată prin spații de etichete suplimentare (pe lângă cele furnizate de DTD) care conțin alte etichete, unele dintre ele fiind din categoria translate.
Listă de etichete separate prin spații care măresc nivelul de indentare. Acest lucru va afecta indentarea în documentul rezultat.
Aspectul din cadrul acestor etichete nu trebuie modificat. Paragraful nu va fi încadrat și nu vor fi adăugate spații suplimentare de indentare sau linii noi în scop cosmetic.
Etichetele nu trebuie să fie închise.
Etichete ignorate și considerate de po4a ca date simple de tip caracter. Aceasta înseamnă că ele pot face parte dintr-un msgid. De exemplu, <b> este un bun candidat pentru această categorie, deoarece plasarea sa în secțiunea translate ar crea un msgids numai cu conținutul său, (și de obicei nu este o propoziție întreagă), ceea ce este greșit.
O listă de atribute separate prin spații care trebuie să fie traduse. Puteți specifica atributele după numele lor (de exemplu, "lang"), dar puteți, de asemenea, să le prefixați cu o ierarhie de etichete, pentru a specifica faptul că acest atribut va fi tradus numai atunci când se află în eticheta specificată. De exemplu: "<bbb><aaa>lang" specifică faptul că atributul lang va fi tradus numai dacă se află într-un tag "<aaa>", care se află într-un tag "<bbb>". Numele etichetelor sunt de fapt expresii regulate, astfel încât puteți scrie și lucruri precum "<aaa|bbb>lang" pentru a traduce numai atributele "lang" care sunt într-o etichetă "<aaa>" sau "<bbb>".
O listă de atribute separate prin spații pentru care traducerea trebuie calificată prin numele atributului, adică textul extras pentru traducere va include atât numele atributului, cât și valoarea acestuia. de exemplu, pentru o etichetă precum "<aaa lang_en="foo">" traducătorilor li se va prezenta șirul "lang_en="foo"". Rețineți că acest lucru adaugă automat atributul dat și în lista attributes.
Continuă chiar dacă DTD-ul este necunoscut sau dacă onsgmls găsește erori în fișierul de intrare.
În mod implicit, msgid-urile care conțin o singură entitate (precum "&version;") sunt ignorate pentru confortul traducătorilor. Activarea acestei opțiuni împiedică această optimizare. Poate fi utilă dacă documentul conține o construcție precum "<title>&Aacute;</title>", chiar dacă mă îndoiesc că astfel de lucruri se vor întâmpla vreodată...
Listă de entități separate prin spații care nu vor fi inserate. Utilizați această opțiune cu precauție: poate determina onsgmls (utilizat intern) să adauge etichete și să facă documentul de ieșire nevalid.

STAREA ACESTUI MODUL

Rezultatul este perfect. Adică, documentele generate sunt exact la fel ca originalele. Dar există încă unele probleme:

  • Ieșirea de eroare a onsgmls este redirecționată implicit către „/dev/null”, ceea ce este clar rău. Nu știu cum să evit asta.

    Problema este că trebuie să „protejez” incluziunile condiționate (adică chestiile "<! [ %foo [" și "]]>") de onsgmls. În caz contrar, onsgmls le mănâncă, iar eu nu știu cum să le restaurez în documentul final. Pentru a preveni acest lucru, le rescriu în "{PO4A-beg-foo}" și "{PO4A-end}".

    Problema este că "{PO4A-end}" și altele pe care le adaug nu sunt valide în document (nu într-o etichetă <p> sau așa ceva).

    Dacă doriți să vizualizați rezultatul onsgmls, trebuie doar să adăugați următorul text la linia de comandă (sau la linia de configurare po4a):

      -o debug=onsgmls
        
  • Funcționează numai cu DTD-urile DebianDoc și DocBook. Adăugarea suportului pentru un nou DTD ar trebui să fie foarte ușoară. Mecanismul este același pentru fiecare DTD, trebuie doar să furnizați o listă a etichetelor existente și unele dintre caracteristicile lor.

    Sunt de acord, acest lucru are nevoie de mai multă documentație, dar este încă considerat beta și nu-mi place să documentez lucruri care se pot/vor schimba.

  • Atenție, suportul pentru DTD-uri este destul de experimental. Nu am citit niciun manual de referință pentru a găsi definiția fiecărei etichete. Am adăugat definiții de etichete la modul până când a funcționat pentru unele documente pe care le-am găsit în internet. Dacă documentul dvs. utilizează mai multe etichete decât al meu, nu va funcționa. Dar, așa cum am spus mai sus, remedierea acestui lucru ar trebui să fie destul de ușoară.

    Am testat DocBook doar pe SAG („System Administrator Guide”: Ghidul administratorului de sistem), dar acest document este destul de mare și ar trebui să utilizeze majoritatea specificităților DocBook.

    Pentru DebianDoc, am testat unele dintre manualele din DDP, dar nu toate încă.

  • În cazul includerii unui fișier, referința de șir de caractere a mesajelor din fișierele PO (de exemplu, linii precum "#: en/titletoc.sgml:9460") va fi greșită.

    Acest lucru se datorează faptului că preprocesez fișierul pentru a proteja includerea condiționată (de exemplu, chestiunea "<! [ %foo [" and "]]>") și unele entități (cum ar fi "&version;") de onsgmls, deoarece le vreau textuale pentru documentul generat. Pentru aceasta, fac o copie temporară a fișierului de intrare și efectuez toate modificările pe care le doresc la acesta înainte de a-l transmite lui onsgmls pentru analizare.

    Pentru a funcționa, înlocuiesc entitățile care solicită includerea unui fișier cu conținutul fișierului dat (astfel încât să pot proteja și ceea ce trebuie să fie într-un subfișier). Dar nimic nu se face până acum pentru a corecta referințele (adică numele fișierului și numărul liniei) după aceea. Nu sunt sigur care este cel mai bun lucru de făcut.

AUTORI

Acest modul este o versiune adaptată a sgmlspl (postprocesor SGML pentru analizatorul ONSGMLS) care a avut:

 Drepturi de autor © 1995 David Megginson <dmeggins@aix1.uottawa.ca>

Adaptarea pentru po4a a fost făcută de:

 Denis Barbier <barbier@linuxfr.org>
 Martin Quinson (mquinson#debian.org)

DREPTURI DE AUTOR și LICENȚĂ

 Drepturi de autor © 1995 David Megginson <dmeggins@aix1.uottawa.ca>.
 Drepturi de autor © 2002-2005 SPI, Inc.

Acest program este software liber; îl puteți redistribui și/sau modifica în conformitate cu termenii GPL v2.0 sau o versiune ulterioară (consultați fișierul COPYING).

2025-09-14 perl v5.40.1