Locale::Po4a::Sgml - SGML-documenten van/naar PO-bestanden
converteren
Het doel van het project po4a (PO voor alles) is om de
vertaalwerkzaamheden (en interessanter nog, het onderhoud van vertalingen)
te vergemakkelijken met behulp van gettext-hulpmiddelen in domeinen waarin
deze niet meteen verwacht worden, zoals documentatie.
Locale::Po4a::Sgml is een module ter ondersteuning van de
vertaling van documentatie in de SGML-indeling naar andere [menselijke]
talen.
Deze module gebruikt onsgmls(1) om de SGML-bestanden te
ontleden. Zorg ervoor dat dit geïnstalleerd is. Zorg er ook voor dat
de DTD van de SGML-bestanden op het systeem geïnstalleerd zijn.
- debug
- Door spaties gescheiden lijst met trefwoorden die aangeven welke categorie
extra debug-berichten moet worden weergegeven. Mogelijke waarden zijn:
"entities",
"generic",
"onsgml",
"refs" en
"tag".
- verbose
- Meer informatie geven over wat gaande is.
- translate
- Door spaties gescheiden lijst van extra tags (naast de door DTD verstrekte
tags) waarvan de inhoud een extra msgid moet vormen, d.w.z. die moeten
worden vertaald.
- section
- Door spaties gescheiden lijst van extra tags (naast de door DTD verstrekte
tags) die andere tags bevatten, waarvan sommige van categorie
translate zijn.
- indent
- Door spaties gescheiden lijst met tags die het insprongniveau verhogen.
Dit zal het inspringen in het resulterende document
beïnvloeden.
- verbatim
- Binnen deze tags mag de opmaak niet gewijzigd worden. Op de alinea zal
geen regelafbreking toegepast worden en er zal geen extra insprongruimte
en geen nieuwe regel toegevoegd worden voor cosmetische doeleinden.
- empty
- Tags welke niet gesloten moeten worden.
- ignore
- Genegeerde tags welke door po4a beschouwd worden als gewone lettertekens.
Dit wil zeggen dat zij deel kunnen uitmaken van een msgid. Bijvoorbeeld is
<b> een goede kandidaat voor deze categorie, want dit plaatsen in de
sectie translate (vertalen), zou een msgid maken met alleen de
inhoud ervan (en dit is meestal geen hele zin), wat slecht is.
- attributes
- Een door spaties gescheiden lijst met attributen welke vertaald moeten
worden. U kunt de attributen bij hun naam opgeven (bijvoorbeeld
"lang"), maar u kunt ze ook laten
voorafgaan door een hiërarchie van tags, om aan te geven dat dit
attribuut enkel vertaald zal worden wanneer het zich binnen de opgegeven
tag bevindt. Bijvoorbeeld:
"<bbb><aaa>lang" geeft aan
dat het attribuut lang enkel vertaald zal worden als het zich binnen een
"<aaa>"-tag bevindt, welke zich op
zijn beurt binnen een "<bbb>"-tag
moet bevinden. De namen van tags zijn eigenlijk reguliere expressies, en
dus kunt u ook zaken schrijven zoals
"<aaa|bbb>lang" om
"lang"-attributen enkel te vertalen
wanneer deze zich binnen een tag
"<aaa>" of
"<bbb>" bevinden.
- qualify
- Een door spaties gescheiden lijst met attributen waarvoor de vertaling
moet worden gekwalificeerd door de naam van het attribuut, dat wil zeggen
dat de tekst die wordt geëxtraheerd voor de vertaling zowel de naam
van het attribuut als de waarde ervan zal bevatten. bijv. voor een tag als
"<aaa lang_en="foo">"
zullen vertalers de string
"lang_en="foo"" te zien
krijgen.. Merk op dat dit ook automatisch het gegeven attribuut toevoegt
aan de lijst met attributen.
- force
- Doorgaan, zelfs als de DTD onbekend is of als onsgmls fouten vindt
in het invoerbestand.
- include-all
- Standaard worden msgid's, welke slechts één entiteit (zoals
"&version;") bevatten, overgeslagen
voor het comfort van de vertalers. Het activeren van deze optie voorkomt
deze optimalisatie. Dit kan nuttig zijn als het document een constructie
bevat, zoals
"<title>Á</title>"
hoewel ik eraan twijfel dat dergelijke zaken ooit voorkomen...
- ignore-inclusion
- Door spaties gescheiden lijst van entiteiten die niet worden
geïntegreerd in de tekst. Gebruik deze optie voorzichtig: ze kan
ervoor zorgen dat onsgmls (dat intern gebruikt wordt) tags toevoegt
en het uitvoerdocument ongeldig maakt.
Het resultaat is perfect. Dat wil zeggen dat de gegenereerde
documenten exact hetzelfde zijn als de originele. Maar er zijn nog steeds
enkele problemen:
- Standaard wordt de foutuitvoer van onsgmls omgeleid naar /dev/null,
wat duidelijk niet goed is. Ik weet niet hoe dit vermeden kan worden.
Het probleem is dat ik de voorwaardelijke insluitingen (d.w.z.
de zaken "<! [ %foo [" en
"]]>") moet "beschermen"
tegen onsgmls. Anders eet onsgmls ze op, en ik weet niet
hoe ik ze moet herstellen in het uiteindelijke document. Om dat te
voorkomen, herschrijf ik ze naar
"{PO4A-beg-foo}" en
"{PO4A-end}".
Het probleem hiermee is dat de
"{PO4A-end}" en dergelijke, welke ik
toevoeg, ongeldig zijn in het document (behalve in een <p>-tag of
zo).
Indien u de uitvoer van onsgmls wil zien, moet u gewoon
het volgende toevoegen aan uw commandoregel (of in de po4a
configuratieregel):
-o debug=onsgmls
- Het werkt enkel met de DebianDoc en DocBook DTD. Ondersteuning toevoegen
voor een nieuwe DTD zou makkelijk moeten zijn. het mechanisme is hetzelfde
voor elke DTD. U dient gewoon een lijst op te geven met de tags en
bepaalde van hun karakteristieken.
Ik ga ermee akkoord dat dit wat meer documentatie kan
gebruiken, maar het wordt nog steeds als bèta beschouwd en ik heb
er een hekel aan om documentatie te maken voor zaken die kunnen/zullen
veranderen.
- Waarschuwing: ondersteuning voor DTD's is eerder experimenteel. Ik las
geen enkele referentiehandleiding om de definitie te vinden van elke tag.
Ik voegde aan de module tag-definities toe tot ze werkte voor sommige
documenten die ik op het internet vond. Indien in uw document meer tags
gebruikt worden dan in het mijne, zal het niet werken. Maar zoals ik
hiervoor reeds zegde, zou het redelijk makkelijk moeten zijn om dit aan te
passen.
Ik testte DocBook enkel met de SAG (System Administrator
Guide), maar dit is een behoorlijk groot document en het zou gebruik
moeten maken van de meeste van de specifieke kenmerken van DocBook.
Voor DebianDoc testte ik met een aantal handleidingen van het
DDP, maar nog niet met allemaal.
- In het geval er bestanden ingesloten worden, zullen de
tekstfragmentreferenties van berichten in PO-bestanden (d.w.z. regels
zoals "#: en/titletoc.sgml:9460") fout
zijn.
Dit is omdat ik een voorbehandeling toepas op het bestand om
de voorwaardelijke insluitingen (d.w.z. de zaken
"<! [ %foo [" en
"]]>") en sommige entiteiten (zoals
"&version;") af te schermen voor
onsgmls, omdat ik ze woordelijk in het gegenereerde document wil.
Om die reden maak ik een tijdelijke kopie van het invoerbestand waarop
ik alle gewenste veranderingen aanbreng, vooraleer ik dat ter ontleding
doorgeef aan onsgmls.
Om dit te laten werken, vervang ik de entiteiten die vragen om
de insluiting van een bestand, door de inhoud van het gegeven bestand
(zodat ik ook in een subbestand de zaken die moeten afgeschermd worden,
kan afschermen). Maar voorlopig werd nog niets gedaan om achteraf de
referenties te corrigeren (d.w.z. bestandsnaam en regelnummer). Ik weet
niet zeker wat er best gedaan zou kunnen worden.
Deze module is een aanpassing van sgmlspl (SGML postprocessor voor
de ONSGMLS-ontleder). Deze was:
Copyright © 1995 David Megginson <dmeggins@aix1.uottawa.ca>
De aanpassing voor po4a gebeurde door:
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)
Copyright © 1995 David Megginson <dmeggins@aix1.uottawa.ca>.
Copyright © 2002-2005 SPI, Inc.
Dit programma is vrije software; u kunt het verder verspreiden
en/of aanpassen onder de bepalingen van de GPL v2.0 of recenter (zie het
bestand COPYING).