Scroll to navigation

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

NAMN

Locale::Po4a::Man - konvertera manualer från/till PO-filer

BESKRIVNING

Målet med po4a-projektet (PO för allt) är att underlätta översättningar (och, ännu mer intressant, underhållet av översättningar) med hjälp av gettext-verktyg på områden där de inte förväntades användas, såsom dokumentation.

Locale::Po4a::Man är ett modul som hjälper till att översätta dokumentation i nroff-format (språket i manualer) till andra [mänskliga] språk.

ÖVERSÄTTNING MED PO4A::MAN

Denna modul försöker verkligen underlätta översättarens arbete. Därför är texten som översättarna får inte en ordagrann kopia av texten i manualen. De grövre delarna av nroff-formatet är dolda, så att översättarna inte kan förstöra dem.

Figursättning

Avsnitt utan indrag omformateras automatiskt för översättaren. Detta kan leda till mindre skillnader i det genererade resultatet, eftersom de omformateringsregler som används av groff inte är särskilt tydliga. Till exempel behålls ibland två mellanslag efter en parentes.

Hur som helst, skillnaden kommer bara att handla om placeringen av de extra mellanslagen i det ombrutna stycket, och jag tycker att det är värt det.

Fontspecifikation

Den första ändringen gäller specifikationer för teckensnittsändringar. I nroff finns det flera sätt att ange om ett visst ord ska skrivas med små bokstäver, fetstil eller kursiv stil. I texten som ska översättas finns det bara ett sätt, lånat från POD-formatet (Perl online documentation):

motsvarande \fItext\fP eller ".I text"
motsvarande \fBtext\fP eller ".B text"
motsvarande \fRtext\fP
motsvarande \f(CWtext\fP eller ".CW text"

Anmärkning: CW-ansiktet är inte tillgängligt för alla groff-enheter. Det rekommenderas inte att använda det. Det tillhandahålls för din bekvämlighet.

Automatisk translitterering av tecken

Po4a omvandlar automatiskt vissa tecken för att underlätta översättningen eller granskningen av översättningen. Här är listan över omvandlingarna:

Bindestreck (-) och minustecken (\-) i man-sidor translittereras alla till enkla streck (-) i PO-filen. Därefter translittereras alla streck till roff-minustecken (\-) när översättningen infogas i utdatadokumentet.

Översättare kan tvinga fram ett bindestreck genom att använda roff-tecknet '\[hy]' i sina översättningar.

Översättare kan använda fasta mellanslag i sina översättningar. Dessa fasta mellanslag (0xA0 i latin1) kommer att translittereras till ett roff-fast mellanslag ('\ ').
`` och '' translittereras respektive till \*(lq och \*(rq.

För att undvika dessa translitterationer kan översättare infoga ett roff-tecken med nollbredd (dvs. använda `\&` respektive '\&').

Att lägga till "<" och ">" i översättningar

Eftersom dessa tecken används för att avgränsa delar under teckensnittsmodifiering kan du inte använda dem ordagrant. Använd istället E<lt> och E<gt> (som i POD, en gång till).

FLAGGOR SOM ACCEPTERAS AV DENNA MODUL

Detta är modulens specifika flaggor:

Aktivera felsökning för vissa interna mekanismer i denna modul. Använd källkoden för att se vilka delar som kan felsökas.
Öka detaljeringsgraden.
Den här flaggan styr modulens beteende när den stöter på en .de-, .ie- eller .if-sektion. Det kan ha följande värden:
Detta är standardvärdet. Modulen kommer att misslyckas när en .de-, .ie- eller .if-sektion påträffas.
Anger att avsnitten .de, .ie eller .if måste kopieras som de är från originalet till det översatta dokumentet.
Anger att avsnitten .de, .ie eller .if kommer att föreslås för översättning. Du bör endast använda denna flagga om en översättningsbar sträng finns i ett av dessa avsnitt. I annat fall bör verbatim föredras.
Den här flaggan anger att filen har genererats och att po4a inte ska försöka upptäcka om man-sidorna har genererats från ett annat format. Den här flaggan är obligatoriskt för att kunna använda po4a på genererade man-sidor. Observera att det ofta är mer känsligt att översätta genererade sidor istället för källtexter, och därför är det en dålig idé.
Den här flaggan är bara användbart för mdoc-sidor.

Det väljer ett striktare stöd för mdoc-formatet genom att tala om för po4a att inte översätta avsnittet 'NAME'. mdoc-sidor vars 'NAME'-avsnitt översätts genererar inga sidhuvuden eller sidfötter.

Enligt sidan groff_mdoc är avsnitten NAME, SYNOPSIS och DESCRIPTION obligatoriska. Det finns inga kända problem med översatta SYNOPSIS- eller DESCRIPTION-avsnitt, men du kan också ange dessa avsnitt på följande sätt:
-o mdoc=NAME,SYNOPSIS,DESCRIPTION

Det här mdoc-problemet kan också lösas med ett tillägg som detta:
PO4A-HEADER:mode=before;position=^.Dd
.TH DOCUMENT_TITLE 1 "Månad dag, år" OS "Avsnittets namn"

Följande flaggor anger beteendet för ett användardefinierat makro (med en .de-begäran) eller för ett klassiskt makro som inte stöds av po4a. De tar som argument en kommaseparerad lista med makron. Till exempel:

 -o noarg=FO,OB,AR -o translate_joined=BA,ZQ,UX

Observera: om ett makro inte stöds av po4a och du anser att det är ett standardmakro för roff, bör du skicka in det till po4a-utvecklingsteamet.

untranslated indikerar att detta makro (vid dess argument) inte behöver översättas.
noarg är som untranslated, förutom att po4a kommer att verifiera att inget argument läggs till i denna makro.
translate_joined indikerar att po4a måste föreslå att makroets argument översätts.
Med translate_each kommer argumenten också att föreslås för översättningen, med undantag för att varje argument kommer att översättas separat.
Denna flagga tar som argument en lista med kommaseparerade par begin:end, där begin och end är kommandon som avgränsar början och slutet på ett avsnitt som inte ska ombrytas.

Observera: inget test utförs för att säkerställa att ett end -kommando matchar sitt begin -kommando; alla avslutande kommandon stoppar no_wrap-läget. Om du har ett begin -makro (respektive end) som inte har något end -makro (respektive begin), kan du ange ett befintligt end -makro (som fi) eller begin -makro (som nf) som motsvarighet. Dessa makron (och deras argument) kommer inte att översättas.

Den här flaggan anger en lista med makron separerade med kommatecken som inte får dela upp det aktuella stycket. Strängen som ska översättas kommer då att innehålla foo <.bar baz qux> quux, där bar är kommandot som ska infogas och baz qux dess argument.
Denna flagga anger hur po4a ska agera när ett okänt makro hittas. Som standard avbryts po4a med en varning. Det kan ha följande värden: failed (standardvärdet), untranslated, noarg, translate_joined eller translate_each (se ovan för en förklaring av dessa värden).

SKRIVA MAN-SIDOR SOM ÖVERENSSTÄMMER MED PO4A::MAN

Denna modul är fortfarande mycket begränsad, och kommer alltid att vara det, eftersom den inte är en riktig nroff-tolkar. Det skulle vara möjligt att skapa en riktig nroff-tolkar, för att låta författare använda alla befintliga makron, eller till och med definiera nya på sina sidor, men vi ville inte göra det. Det skulle vara för svårt, och vi tyckte att det inte var nödvändigt. Vi anser att om manpages-författare vill se sina produktioner översatta, måste de kanske anpassa sig för att underlätta översättarnas arbete.

Således har den man-parser som implementerats i po4a några kända begränsningar som vi inte riktigt är benägna att korrigera, och som kommer att utgöra några fallgropar som du måste undvika om du vill att översättare ska ta hand om din dokumentation.

Programmera inte i nroff

nroff är ett komplett programmeringsspråk med makrodefinitioner, villkorssatser och så vidare. Eftersom denna parser inte är en fullfjädrad nroff-tolkar kommer den att misslyckas på sidor som använder dessa funktioner (det finns cirka 200 sådana sidor på min dator).

Använd det vanliga makrosetet

Det finns fortfarande några makron som inte stöds av po4a::man. Detta beror endast på att jag inte har lyckats hitta någon dokumentation om dem. Här är en lista över makron som inte stöds och som används på min dator. Observera att listan inte är fullständig, eftersom programmet avbryts vid det första makrot som inte stöds. Om du har information om något av dessa makron lägger jag gärna till stöd för dem. På grund av dessa makron är cirka 250 sidor på min dator otillgängliga för 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

Dölja text från po4a

Ibland vet författaren att vissa delar inte är översättningsbara och inte bör extraheras av po4a. Till exempel kan en flagga acceptera ett argument other, och other kan också visas som det sista objektet i en lista. I det första fallet bör other inte vara översättningsbart. I det andra fallet bör other översättas.

I sådana fall kan författaren undvika po4a för att extrahera vissa strängar genom att använda vissa speciella groff-konstruktioner:

 .if !'po4a'hide' .B annat

(detta kräver flaggan -o groff_code=verbatim)

Ett nytt makro kan också definieras för att automatisera detta:
.de IR_untranslated
. IR \\$@
..

 .IR_untranslated \-q ", " \-\-quiet

(detta kräver flaggorna -o groff_code=verbatim och -o untranslated=IR_untranslated; med denna konstruktion är villkoret .if !'po4a'hide' inte strikt nödvändigt eftersom po4a inte kommer att analysera det interna i makrodefinitionen)

eller använda ett alias:
.als IR_untranslated IR

 .IR_untranslated \-q ", " \-\-quiet

Detta kräver flaggan -o untranslated=als,IR_untranslated.

Slutsats

Sammanfattningsvis: håll det enkelt och försök inte vara smart när du skriver dina man-sidor. Det finns många möjligheter i nroff, men denna parser stöder inte alla. Försök till exempel inte att använda \c för att avbryta textbearbetningen (som 40 sidor på min dator gör). Se också till att placera makroargumenten på samma rad som själva makrot. Jag vet att det är giltigt i nroff, men det skulle komplicera parsern för mycket.

En annan möjlighet är naturligtvis att använda ett annat format som är mer översättarvänligt (som POD med po4a::pod eller något av XML-familjens format, till exempel SGML), men tack vare po4a::man behövs det inte längre. Om källformatet för din dokumentation är POD eller XML kan det dock vara klokt att översätta källformatet och inte det genererade formatet. I de flesta fall kommer po4a::man att upptäcka genererade sidor och utfärda en varning. Det kommer till och med att vägra att bearbeta POD-genererade sidor, eftersom dessa sidor hanteras perfekt av po4a::pod och eftersom deras nroff-motsvarighet definierar en hel del nya makron som jag inte ville skriva stöd för. På min dator är 1432 av de 4323 sidorna genererade från POD och kommer att ignoreras av po4a::man.

I de flesta fall kommer po4a::man att upptäcka problemet och vägra att bearbeta sidan, och istället visa ett anpassat meddelande. I vissa sällsynta fall kommer programmet att slutföras utan varning, men resultatet kommer att bli felaktigt. Sådana fall kallas "buggar" ;) Om du stöter på ett sådant fall, se till att rapportera detta, tillsammans med en lösning om möjligt…

STATUS FÖR DENNA MODUL

Denna modul kan användas för de flesta befintliga man-sidor.

Vissa tester körs regelbundet på Linux-datorer:

  • en tredjedel av sidorna avvisas eftersom de har skapats från ett annat format som stöds av po4a (t.ex. POD eller SGML).
  • 10% of de återstående sidorna avvisas med ett fel (t.ex. ett groff-makro stöds inte).
  • Sedan accepteras mindre än 1% av sidorna tyst av po4a, men med betydande problem (dvs. saknade ord eller nya ord infogade)
  • De andra sidorna hanteras vanligtvis utan större skillnader än skillnader i avstånd eller radbrytningar (teckensnittsproblem i mindre än 10% of av de bearbetade sidorna).

SE ÄVEN

Locale::Po4a::Pod(3pm), Locale::Po4a::TransTractor(3pm), po4a(7)

UPPHOVSPERSONER

 Denis Barbier <barbier@linuxfr.org>
 Nicolas François <nicolas.francois@centraliens.net>
 Martin Quinson (mquinson#debian.org)

UPPHOVSRÄTT OCH LICENS

Copyright © 2002-2008 SPI, Inc.

Detta program är fri programvara; du får distribuera och/eller modifiera det enligt villkoren i GPL v2.0 eller senare (se filen COPYING).

2026-03-23 perl v5.42.0