LOCALE::PO4A::PO.3PM(1)

NAAM
Locale::Po4a::Po - Module voor het manipuleren van PO-bestanden

OVERZICHT
    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');

BESCHRIJVING
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.

MOGELIJKE OPTIES BIJ DEZE MODULE

--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".

Functies met betrekking tot volledige berichtencatalogi

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.

Functies om een berichtencatalogus te gebruiken voor vertalingen

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.

Functies voor het bouwen van een berichtencatalogus

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.

    comment
        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.

Diverse functies

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.

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