Locale::Po4a::Man(3pm) | Po4a-hulpmiddelen | Locale::Po4a::Man(3pm) |
Locale::Po4a::Man - man-pagina's 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::Man is een module ter ondersteuning van de vertaling van documentatie in de nroff-indeling (de taal die voor man-pagina's gebruikt wordt) naar andere [menselijke] talen.
Deze module doet er alles aan om het leven van de vertaler gemakkelijker te maken. Daarvoor is de tekst die aan vertalers wordt voorgelegd geen letterlijke kopie van de tekst van de man-pagina. De ruwere onderdelen van de nroff-indeling worden inderdaad verborgen gehouden, zodat vertalers ze niet kunnen verknoeien.
Op paragrafen die niet inspringen wordt ten behoeve van vertalers automatisch regelafbreking toegepast. Dit kan leiden tot een aantal minimale verschillen in de gegenereerde uitvoer, omdat de regels voor regelafbreking welke door groff gebruikt worden, niet erg duidelijk zijn. Bijvoorbeeld worden twee spaties na een haakje soms behouden.
Hoe dan ook zit het verschil enkel in de positie van de extra spaties in de inspringende alinea, en ik denk dat het dit waard is.
De eerste wijziging betreft specificaties voor het wijzigen van lettertypes. In nroff zijn er verschillende manieren om aan te geven of een bepaald woord moet geschreven worden in klein, vet of schuin lettertype. In de te vertalen tekst is er slechts één manier, ontleend aan de POD-indeling (de indeling voor onlinedocumentatie van Perl):
Opmerking: niet voor alle groff-apparaten is het lettertype CW beschikbaar. Het gebruik ervan wordt niet aanbevolen. Het is bedoeld voor uw gemak.
Po4a doet een automatische omzetting van sommige lettertekens om de vertaling en het nazicht ervan te vergemakkelijken. Hier volgt de lijst van omzettingen:
Vertalers kunnen een koppelteken afdwingen door in hun vertaling het roff-letterteken '\[hy]' te gebruiken.
Om deze omzettingen te voorkomen kunnen vertalers een roff-teken met een breedte nul invoegen (met name door respectievelijk `\&` of '\&' te gebruiken).
Aangezien deze tekens worden gebruikt om delen af te bakenen waarvoor een wijziging van het lettertype van toepassing is, kunt u ze niet letterlijk gebruiken. Gebruik in de plaats daarvan E<lt> en E<gt> (nogmaals zoals in POD).
De volgende opties zijn specifiek voor deze module:
Hiermee selecteert men een meer strikte ondersteuning voor de mdoc-indeling door po4a op te dragen de sectie 'NAME' niet te vertalen. mdoc-pagina's waarvan de sectie 'NAME' vertaald wordt, krijgen geen header en footer.
Volgens de man-pagina groff_mdoc zijn de secties NAME,
SYNOPSIS en DESCRIPTION verplicht. Er zijn geen problemen bekend met een
vertaalde sectie SYNOPSIS of DESCRIPTION, maar u kunt deze secties ook
op deze manier aanduiden:
-o mdoc=NAME,SYNOPSIS,DESCRIPTION
Dit mdoc-probleem kan ook opgelost worden met een addendum
zoals dit:
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "Month day, year" OS "Section
Name"
De volgende opties bepalen het gedrag van een door de gebruiker gedefinieerde macro (met een .de-verzoek) of van een klassieke macro welke niet door po4a ondersteund wordt. Zij hebben als argument een door komma's gescheiden lijst met macro's. Bijvoorbeeld:
-o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX
Opmerking: indien een macro niet ondersteund wordt door po4a en als u van mening bent dat het om een standaard roff-macro gaat, signaleer dit dan aan het team ontwikkelaars van po4a.
Opmerking: er wordt geen test uitgevoerd om ervoor te zorgen dat een einde-commando met zijn begin-commando overeenkomt. Elk einde-commando beëindigt de no_wrap-modus. Indien u een begin-macro (respectievelijk einde-macro) heeft, welke geen einde-macro (respectievelijk begin-macro) heeft, kunt u als tegenhanger een bestaand einde (als fi) of een bestaand begin (als nf) opgeven. Deze macro's (en hun argumenten) zullen niet vertaald worden.
Deze module is nog erg beperkt, en zal dat ook altijd zijn, want het is geen echte interpreter voor nroff. Een echte nroff-interpreter maken, wat auteurs de mogelijkheid zou bieden om alle bestaande macro's te gebruiken en er zelfs nieuwe te definiëren in hun pagina's, zou mogelijk zijn, maar dit wilden we niet. Dit zou te moeilijk zijn en we dachten dat het niet nodig was. We denken dat als auteurs van man-pagina's hun producten vertaald willen zien, ze zich misschien moeten aanpassen om het werk van vertalers te vergemakkelijken.
En dus heeft de man-paginaontleder die in po4a geïmplementeerd werd, enkele bekende beperkingen, welke we niet echt geneigd zijn te verbeteren en welke een aantal valkuilen vormen die u zult moet vermijden als u wilt dat vertalers zich om uw documentatie bekommeren.
nroff is een volledige programmeertaal met macrodefinities, conditionele bewerkingen, enz. Omdat deze ontleder geen volwaardige nroff-interpreter is, zal hij falen bij pagina's welke van deze voorzieningen gebruik maken (Op mijn computer staan ongeveer 200 dergelijke pagina's).
Er zijn nog steeds enige macro's die niet ondersteund worden door po4a::man. Dit is enkel omdat ik er geen enkele documentatie over kon vinden. Hier volgt de lijst van niet-ondersteunde macro's die op mijn computer gebruikt worden. Merk op dat deze lijst niet exhaustief is, omdat het programma faalt bij de eerste niet-ondersteunde macro die het tegenkomt. Indien u enige informatie heeft over sommige van deze macro's, ben ik graag bereid er ondersteuning voor toe te voegen. Omwille van deze macro's zijn ongeveer 250 pagina's op mijn computer niet toegankelijk voor po4a::man.
.. ." .AT .b .bank .BE ..br .Bu .BUGS .BY .ce .dbmmanage .do .En .EP .EX .Fi .hw .i .Id .l .LO .mf .N .na .NF .nh .nl .Nm .ns .NXR .OPTIONS .PB .pp .PR .PRE .PU .REq .RH .rn .S< .sh .SI .splitfont .Sx .T .TF .The .TT .UC .ul .Vb .zZ
Soms weet de auteur dat sommige delen niet vertaalbaar zijn en niet geëxtraheerd zouden moeten worden door po4a. Bijvoorbeeld kan het zijn dat een optie het argument other kent en dat other ook voorkomt als laatste item van een lijst. In het eerste geval zou other niet-vertaalbaar moeten zijn. Maar in het tweede geval zou other wel vertaald mogen worden.
In een dergelijk geval kan de auteur vermijden dat po4a bepaalde tekstfragmenten extraheert, door gebruik te maken van enkele speciale groff-constructen:
.if !'po4a'hide' .B other
(dit vereist de optie -o groff_code=verbatim)
Er kan ook een nieuwe macro gedefinieerd worden om dit te
automatiseren:
.de IR_untranslated
. IR \\$@
..
.IR_untranslated \-q ", " \-\-quiet
(dit vereist de opties -o groff_code=verbatim en -o untranslated=IR_untranslated; met dit construct is de voorwaarde .if !'po4a'hide' niet strikt noodzakelijk, omdat po4a de binnenkant van de macrodefinitie niet zal ontleden)
of door een alias te gebruiken:
.als IR_untranslated IR
.IR_untranslated \-q ", " \-\-quiet
Dit vereist de optie -o untranslated=als,IR_untranslated.
Bij wijze van samenvatting voor dit onderdeel zou men kunnen zeggen: hou het eenvoudig en tracht niet de slimmerik uit te hangen bij het schrijven van uw man-pagina's. Er zijn veel dingen mogelijk in nroff, welke niet ondersteund worden door deze ontleder. Probeer bijvoorbeeld niet te spelen met \c om de tekstverwerking te onderbreken (zoals 40 pagina's op mijn computer doen). En zorg ervoor de macroargumenten op dezelfde regel te plaatsen als de macro zelf. Ik weet dat dergelijke zaken toegestaan zijn in nroff, maar het zou de ontleder te complex maken om daarmee om te gaan.
Een andere mogelijkheid is natuurlijk om een andere indeling te gebruiken die meer vertalervriendelijk is (zoals POD en daarvoor po4a::pod gebruiken, of een indeling uit de XML-familie, zoals SGML), maar dankzij po4a::man is dat niet meer nodig. Dit gezegd zijnde, als de oorspronkelijke indeling van uw documentatie POD of XML is, kan het verstandiger zijn de vertaling vanuit deze oorspronkelijke indeling te laten gebeuren en niet vanuit deze gegenereerde indeling. In de meeste gevallen zal po4a::man gegenereerde pagina's ontdekken en een waarschuwing geven . Het zal zelfs weigeren om uit POD gegenereerde pagina's te verwerken, omdat dergelijke pagina's perfect afgehandeld kunnen worden door po4a::pod, en omdat voor hun nroff-tegenhanger een heleboel nieuwe macro's gedefinieerd worden waarvoor ik geen ondersteuning wilde schrijven. Op mijn computer werden 1432 van de 4323 pagina's uit POD gegenereerd en deze zullen door po4a::man genegeerd worden.
In de meeste gevallen zal po4a::man het probleem ontdekken en de pagina weigeren te verwerken en een passende melding geven. In enkele zeldzame gevallen zal het programma de verwerking wel uitvoeren zonder te waarschuwen, maar zal de uitvoer fout zijn. Zulke gevallen worden "bugs" genoemd ;) Indien u een dergelijk geval tegenkomt, meld het dan zeker, samen met een reparatie, mocht dat kunnen…
Deze module kan gebruikt worden voor de meeste van de bestaande man-pagina's.
Enkele tests worden regelmatig uitgevoerd op Linux-computers:
Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)
Denis Barbier <barbier@linuxfr.org> Nicolas François <nicolas.francois@centraliens.net> Martin Quinson (mquinson#debian.org)
Copyright © 2002-2008 SPI, Inc.
Dit programma is vrije software; u kunt het verder verspreiden en/of aanpassen onder de bepalingen van de GPL (zie het bestand COPYING).
2023-01-03 | Po4a-hulpmiddelen |