Locale::Po4a::Po - Module voor het manipuleren van
PO-bestanden
use Locale::Po4a::Po;
my $pofile=Locale::Po4a::Po->new();
# PO-bestand lezen
$pofile->read('file.po');
# Een element toevoegen
$pofile->push('msgid' => 'Hello', 'msgstr' => 'bonjour',
'flags' => "wrap", 'reference'=>'file.c:46');
# Een vertaling extraheren
$pofile->gettext("Hello"); # geeft als terugkeer 'bonjour'
# Terug naar een bestand schrijven
$pofile->write('anderbestand.po');
Locale::Po4a::Po is een module die u toelaat berichtencatalogi te
manipuleren. U kunt uit bestand lezen/naar bestand schrijven (de extensie
ervan is vaak po), u kunt in een oogwenk nieuwe elementen bouwen of
om de vertaling van een tekstfragment vragen.
Voor een meer volledige beschrijving van berichtencatalogi in de
PO-indeling en hun gebruik kunt u de infodocumentatie van het
gettext-programma (sectie "'PO-bestanden"') raadplegen.
Deze module is een onderdeel van het po4a-project, dat tot doel
heeft PO-bestanden (oorspronkelijk ontworpen om de vertaling van
programmaberichten te vergemakkelijken) te gebruiken om alles te vertalen,
waaronder documentatie (man-pagina's, infohandleidingen),
pakketbeschrijvingen, debconf-sjablonen en alles wat hiervan kan
profiteren.
- --porefs
type
- Het referentieformaat specificeren. Het argument type kan
één van de volgende zijn: never om geen enkele
referentie te produceren, file om enkel het bestand zonder het
lijnnummer te specificeren, counter om het regelnummer te vervangen
door een oplopende teller, en full om volledige referenties op te
nemen (standaard: full).
- --wrap-po
no|newlines|getal (standaard: 76)
- Specificeren hoe de regelafbreking voor po-bestanden er moet uitzien. Dit
geeft de keuze tussen bestanden met een mooie regelafbreking, die echter
kunnen leiden tot git-conflicten en bestanden die makkelijker automatisch
te behandelen zijn, maar voor mensen moeilijker leesbaar.
Vanouds brak de gettext-suite uit cosmetische overwegingen de
regels van po-bestanden af bij de 77e kolom. Deze optie specificeert het
gedrag van po4a. Indien dit ingesteld wordt op een numerieke waarde, zal
po4a de regels van het po-bestand afbreken na deze kolom en na
regeleinden die in de inhoud voorkomen. Indien dit ingesteld wordt op
newlines, zal po4a de msgid en msgstr enkel afbreken na
regeleinden die in de inhoud voorkomen. Indien dit ingesteld wordt op
no, zal po4a helemaal geen regelafbreking toepassen in het
po-bestand. De regelafbreking in het referentiecommentaar gebeurt steeds
door het gettext-gereedschap dat we intern gebruiken.
Merk op dat deze optie geen impact heeft op de wijze waarop
regelafbreking in msgid en msgstr gebeurt, d.w.z. op hoe einderegels
toegevoegd worden aan de inhoud van deze tekstfragmenten.
- --msgid-bugs-address
email@adres
- Het adres instellen voor het rapporteren van msgid-bugs. Standaard
bevatten de gecreëerde POT-bestanden niet het veld
Report-Msgid-Bugs-To.
- --copyright-holder
tekenreeks
- Instellen van de copyrighthouder in de POT-header. De standaardwaarde is
"Free Software Foundation, Inc."
- --package-name
tekenreeks
- Instellen van de pakketnaam voor de POT-header. Standaard is dat
"PACKAGE".
- --package-version
tekenreeks
- Instellen van de pakketversie voor de POT-header. Standaard is dat
"VERSION".
- new()
- Creëert een nieuwe berichtencatalogus. Als er een argument
opgegeven wordt, is het de naam van een PO-bestand dat geladen moet
worden.
- read($)
- Leest een PO-bestand (waarvan de naam als argument opgegeven werd).
Elementen in self die reeds eerder bestonden, worden niet verwijderd,
nieuwe worden aan het einde van de catalogus toegevoegd.
- write($)
- Schrijft de huidige catalogus naar het opgegeven bestand.
- write_if_needed($$)
- Zoals write, maar als het PO- en het POT-bestand reeds bestaan, wordt het
object naar een tijdelijk bestand geschreven, dat vergeleken wordt met het
bestaande bestand om na te gaan of de update nodig is (dit vermijdt dat
een POT-bestand gewijzigd wordt, enkel om een regelreferentie of het veld
POT-Creation-Date bij te werken).
- filter($)
- Deze functie extraheert een catalogus uit een bestaande catalogus. Enkel
de elementen die in het opgegeven bestand een referentie hebben, zullen in
de resulterende catalogus geplaatst worden.
Deze functie ontleedt zijn argument, zet het om naar een
Perl-functie, evalueert deze definitie en filtert de velden waarvoor
deze functie de waarde true (waar) teruggeeft.
Soms hou ik van Perl ;)
- to_utf8()
- Zet de msgstrs in het PO-bestand om naar UTF-8 . Doet niets indien de
tekenset in het PO-bestand niet gespecificeerd werd (waarde van
"CHARSET"), of indien deze reeds UTF-8 of ASCII is.
- gettext($%)
- Zoekt in de huidige catalogus de vertaling op van het als argument
opgegeven tekstfragment. De door de functie teruggegeven waarde is het
originele (niet-vertaalde) tekstfragment als het tekstfragment onvindbaar
is.
Na het te vertalen tekstfragment kunt u een hash van extra
argumenten doorgeven. Dit zijn de geldige vermeldingen:
- wrap
- booleaanse operator die aangeeft of we de witruimtes in de tekenreeks als
onbelangrijk kunnen beschouwen. Indien het antwoord ja is, canoniseert de
functie het tekstfragment voordat de vertaling ervan opgezocht wordt en
past ze regelafbreking toe op het resultaat.
- wrapcol
- de kolom waar de regelafbreking moet gebeuren (standaard: 76).
- stats_get()
- Bezorgt statistieken over de succesratio van gettext sinds de laatste keer
dat stats_clear() aangeroepen werd. Merk op dat dit niet dezelfde
statistieken zijn dan die welke door msgfmt --statistic weergegeven
worden. Hier betreft het statistieken over het recente gebruik van het
PO-bestand, terwijl msgfmt rapporteert over de toestand van het bestand.
Een gebruiksvoorbeeld:
[een zeker gebruik van het PO-bestand om zaken te vertalen]
($percent,$hit,$queries) = $pofile->stats_get();
print "Tot nu werden in $percent\% ($hit op $queries) van de gevallen vertalingen gevonden voor tekstfragmenten.\n";
- stats_clear()
- Wist de statistieken over de succesratio van gettext.
- push(%)
- Een nieuw element toevoegen aan het einde van de huidige catalogus. De
argumenten moeten een hash-tabel vormen. Geldige sleutelwaarden zijn:
- msgid
- het tekstfragment in de originele taal.
- msgstr
- de vertaling.
- reference
- een aanduiding over de vindplaats van dit tekstfragment. Bijvoorbeeld:
bestand.c:46 (hetgeen betekent in 'bestand.c' op regel 46). Het kan een
door spaties gescheiden lijst zijn wanneer het meermaals voorkomt.
- een hier handmatig (door de vertalers) toegevoegde commentaar. Hier is de
indeling vrij.
- automatic
- een commentaar dat automatisch toegevoegd werd door het programma voor het
extraheren van tekstfragmenten. Zie de optie --add-comments van het
xgettext-programma voor meer informatie.
- flags
- door spaties gescheiden lijst van alle gedefinieerde vlaggen voor dit
element.
Geldige vlaggen zijn: c-text, python-text,
lisp-text, elisp-text, librep-text,
smalltalk-text, java-text, awk-text,
object-pascal-text, ycp-text, tcl-text,
wrap, no-wrap en fuzzy.
Raadpleeg de gettext-documentatie voor hun betekenis.
- type
- dit is een hoofdzakelijk intern argument: het wordt gebruikt bij het
uitvoeren van gettextize op documenten. Het idee hier is om zowel het
origineel als de vertaling te ontleden naar een PO-object en deze samen te
voegen door de msgid van het ene als msgid te gebruiken en het msgid van
het andere als msgstr. Om te verzekeren dat de zaken goed verlopen, krijgt
elke msgid in PO-objecten op basis van zijn structuur (zoals
"chapt", "sect1", "p" enzovoort in DocBook)
een type toegewezen. Indien tekstfragmenten niet hetzelfde type hebben,
betekent dit dat beide bestanden niet dezelfde structuur hebben en zal het
proces een fout rapporteren.
Deze informatie wordt als automatische commentaar opgeschreven
in het PO-bestand, omdat dit vertalers enige context geeft over de te
vertalen tekstfragmenten.
- wrap
- booleaanse operator die aangeeft of witruimte kan aangepast worden in het
kader van cosmetische opmaakaanpassingen. Indien de waarde true (waar) is,
wordt het tekstfragment voor gebruik gecanoniseerd.
Deze informatie wordt opgeschreven in het PO-bestand met de
vlaggen wrap (indien waar) of no-wrap (indien niet
waar).
- wrapcol
- de kolom waar de regelafbreking moet gebeuren (standaard: 76).
Deze informatie wordt niet opgeschreven in het PO-bestand.
- count_entries()
- Rapporteert het aantal elementen in de catalogus (zonder de header).
- count_entries_doc()
- Rapporteert het aantal elementen in het document. Indien een tekstfragment
meerdere keren voorkomt in het document, zal het meerdere keren geteld
worden.
- msgid($)
- Geeft het msgid terug van het opgegeven getal.
- msgid_doc($)
- Geeft het msgid terug dat de opgegeven positie in het document
bekleedt.
- type_doc($)
- Het geeft als resultaat het type van de msgid en de positie ervan in het
document. Dit is waarschijnlijk alleen nuttig voor gettextisatie, en het
wordt apart van {$msgid}{'type'} opgeslagen omdat de latere locatie kan
worden overschreven met een ander type wanneer de
$msgid wordt gedupliceerd in het
hoofddocument.
- get_charset()
- Rapporteert de in de PO-header opgegeven tekenset. Indien dit daar niet
ingesteld werd, zal het "UTF-8" rapporteren.
- set_charset($)
- Stelt in de PO-header de tekenset in op de waarde die in het eerste
argument opgegeven werd. Indien u deze functie nooit aanroept (en er geen
bestand met een specifieke tekenset gelezen wordt), blijft de
standaardwaarde behouden op "UTF-8". Deze waarde wijzigt het
gedrag van deze module niet, zij wordt enkel gebruikt om dat veld in de
header in te vullen en dat bij get_charset() terug te zenden.
Denis Barbier <barbier@linuxfr.org>
Martin Quinson (mquinson#debian.org)