Rechercher une page de manuel
Locale::Po4a::TransTractor.3pm
Langue: fr
Version: 2008-11-05 (ubuntu - 07/07/09)
Section: 3 (Bibliothèques de fonctions)
Sommaire
NOM
Locale::Po4a::TransTractor - Traducteur/extracteur gA~XnA~Xrique.DESCRIPTION
L'objectif du projet po4a [po for anything --- po pour tout] est de simplifier la traduction (et de faA~Xon plus intA~Xressante, la maintenance des traductions) en utilisant les outils gettext dans des domaines pour lesquels ils n'A~Xtaient pas destinA~Xs, comme la documentation.Cette classe est l'ancA~Xtre de tous les analyseurs po4a utilisA~Xs pour lire un document, y chercher les chaA~Xnes traduisibles, les extraire dans un fichier po, et les remplacer par leur traduction dans le document gA~XnA~XrA~X.
Plus formellement, elle prend les paramA~Xtres d'entrA~Xe suivants :
- -
- un document A~ traduire ;
- -
- un fichier po contenant les traductions A~ utiliser.
En sortie, elle produit :
- -
- un autre fichier po, rA~Xsultat de l'extraction des chaA~Xnes traduisibles du document en entrA~Xe ;
- -
- un document traduit, partageant la mA~Xme structure que celui en entrA~Xe, mais dont toutes les chaA~Xnes traduisibles ont A~XtA~X remplacA~Xes par les traductions trouvA~Xes dans le fichier po fourni en entrA~Xe.
Voici une reprA~Xsentation graphique de tout cela :
document entrA~Xe --\ /---> document sortie \ / (traduit) +-> parse() function -----+ / \ po entrA~Xe --------/ \---> po sortie (extrait)
FONCTIONS QUE VOTRE ANALYSEUR DOIT SURCHARGER
- parse()
- Il s'agit de la fonction principale oA~X tout le travail a lieu : la lecture des documents en entrA~Xe, la gA~XnA~Xration des documents en sortie et l'extraction des chaA~Xnes traduisibles. Tout ceci est assez simple avec les fonctions fournies et prA~XsentA~Xes dans la section AX FONCTIONS INTERNES AX ci-dessous. Veuillez aussi vous reporter A~ la section SYNOPSIS, qui prA~Xsente un exemple.
Cette fonction est appelA~Xe par la fonction process() ci-dessous, mais si vous choisissez d'utiliser la fonction new(), et d'ajouter le contenu manuellement, vous devrez appeler cette fonction vous-mA~Xme.
- docheader()
- Cette fonction renvoie l'en-tA~Xte que nous devons ajouter au document produit, formatA~X comme il faut pour qu'il soit un commentaire pour le langage cible. Reportez-vous A~ la section AX A~Xduquer les dA~Xveloppeurs au problA~Xme des traductions AX, dans po4a(7).
SYNOPSIS
L'exemple suivant analyse une liste de paragraphes commenA~Xant par AX <p AX>. Pour simplifier, nous supposons que le document est bien formatA~X, c'est-A~ -dire que la balise <p> est la seule prA~Xsente et que cette balise se trouve au dA~Xbut de chaque paragraphe.sub parse { my $self = shift; PARAGRAPHE: while (1) { my ($paragraphe,$pararef)=("",""); my $premier=1; ($ligne,$lref)=$self->shiftline(); while (defined($ligne)) { if ($ligne =~ m/<p>/ && !$premier--; ) { # Ce n'est pas la premiA~Xre balise <p>. # Remet la ligne actuelle dans le document d'entrA~Xe, # et met le paragraphe dans la sortie $self->unshiftline($line,$lref); # Maintenant que le document est formA~X, il faut le traduire : # - Retirons les balises de tA~Xte $paragraphe =~ s/^<p>//s; # - Poussons la balise de tA~Xte (A~ ne pas traduire) et le # reste du paragraphe (A~ traduire) dans le document de # sortie $self->pushline( "<p>" . $document->translate($paragraphe,$pararef) ); next PARAGRAPHE; } else { # Ajout A~ la fin du paragraphe $paragraphe .= $ligne; $pararef = $lref unless(length($pararef)); } # Re-initialise la boucle ($ligne,$lref)=$self->shiftline(); } # Aucune nouvelle ligne ? C'est la fin du fichier d'entrA~Xe. return; } }
Une fois que vous avez implA~XmentA~X la fonction parse, vous pouvez utiliser cette nouvelle classe en utilisant l'interface publique prA~XsentA~Xe dans la section suivante.
INTERFACE PUBLIQUE pour les scripts utilisant votre analyseur
Constructeur
- process(%)
- Cette fonction peut faire tout ce dont vous avez besoin avec un document po4a en une seule invocation. Ses paramA~Xtres doivent A~Xtre fournis sous forme de table de hachage. Voici les diffA~Xrentes actions possibles :
-
- a.
- Lit tous les fichiers po spA~XcifiA~Xs dans po_in_name
- b.
- Lit tous les documents originaux spA~XcifiA~Xs dans file_in_name
- c.
- Analyse le document
- d.
- Lit et applique tous les addenda spA~XcifiA~Xs
- e.
- A~Xcrit le document traduit dans file_out_name (si spA~XcifiA~X)
- f.
- A~Xcrit le fichier po extrait dans po_out_name (si spA~XcifiA~X)
PARAMA~XTRES, en plus de ceux acceptA~Xs par new(), ainsi que leur type :-
- file_in_name (@)
- Liste de noms de fichiers d'oA~X lire les documents en entrA~Xe.
- file_in_charset ($)
- Le jeu de caractA~Xres du document d'entrA~Xe (s'il n'est pas spA~XcifiA~X, il essayera de le dA~Xtecter A~ partir du document).
- file_out_name ($)
- Nom de fichier oA~X A~Xcrire le document en sortie.
- file_out_charset ($)
- Le jeu de caractA~Xres du document de sortie (s'il n'est pas spA~XcifiA~X, le jeu de caractA~Xres du fichier po sera utilisA~X).
- po_in_name (@)
- Liste de noms de fichiers d'oA~X lire les fichiers po d'entrA~Xe (ceux contenant les traductions A~ utiliser pour la traduction du document).
- po_out_name ($)
- Nom de fichier oA~X A~Xcrire le fichier po de sortie (celui contenant les chaA~Xnes extraites du document d'entrA~Xe).
- addendum (@)
- Liste de noms de fichiers d'oA~X lire les addenda A~ appliquer.
- addendum-charset ($)
- Jeu de caractA~Xres des addenda.
-
- new(%)
- CrA~Xer un nouveau document Po4a. Options acceptA~Xes (sous forme de hachage) :
-
- verbose ($)
- RA~Xgle le niveau de bavardage.
- debug ($)
- RA~Xgle le niveau de dA~Xbogage.
-
Manipuler les documents
- read($)
- Ajouter un nouveau document d'entrA~Xe aprA~Xs ceux dA~XjA~ ajoutA~Xs. Le paramA~Xtre est le nom du fichier A~ lire.
Notez que cette fonction n'analyse pas le fichier donnA~X. Il faut utiliser parse() pour cela une fois que vous avez ajoutA~X au document tous les fichiers que vous souhaitez analyser.
- write($)
- A~Xcrire le document traduit dans le fichier dont le nom est passA~X en paramA~Xtre.
Manipuler les fichiers po
- readpo($)
- Ajouter le contenu du fichier dont le nom est passA~X en paramA~Xtre au po d'entrA~Xe. Notez que l'ancien contenu du po d'entrA~Xe n'est pas effacA~X.
- writepo($)
- A~Xcrire le po extrait dans le fichier dont le nom est passA~X en paramA~Xtre.
- stats()
- Renvoie des statistiques A~ propos de la traduction. Veuillez noter que ce ne sont pas les statistiques affichA~Xes par msgfmt --statistic. Dans ce cas, il s'agit des statistiques concernant l'utilisation rA~Xcente du fichier po, tandis que msgfmt renseigne sur le statut du fichier po. Il s'agit d'une encapsulation autour de la fonction Locale::Po4a::Po::stats_get en utilisant le fichier po en entrA~Xe. Voici un exemple d'utilisation :
[utilisation normal d'un document po4a...] ($pourcent,$traduit,$total) = $document->stats(); print "Des traductions ont A~XtA~X trouvA~Xes pour $pourcent\% ($traduit sur $total) des chaA~Xnes.\n";
Manipuler les addenda
- addendum($)
- Veuillez vous reporter A~ po4a(7) pour plus d'informations sur ce que sont les addenda et comment les traducteurs doivent les A~Xcrire. Pour appliquer un addendum au document traduit, vous n'avez qu'A~ fournir le nom du fichier A~ cette fonction, et c'est fini ;)
Cette fonction retourne un entier non nul en cas d'erreur.
FONCTIONS INTERNES utiliser pour dA~Xriver un analyseur (parser)
RA~XcupA~Xration de l'entrA~Xe, gA~XnA~Xration de la sortie
Quatre fonctions sont fournies pour rA~XcupA~Xrer l'entrA~Xe et renvoyer la sortie. Elles sont trA~Xs similaires aux couples shift/unshift et push/pop. La premiA~Xre paire concerne l'entrA~Xe, et la seconde la sortie. Moyen mnA~Xmotechnique : en entrA~Xe, on veut rA~XcupA~Xrer la premiA~Xre ligne, ce que shift permet ; en sortie on veut ajouter le rA~Xsultat A~ la fin, ce que fait push.- shiftline()
- Cette fonction renvoie le ligne suivante du document d'entrA~Xe qui est analysA~X, ainsi que sa rA~XfA~Xrence (les deux A~Xtant placA~Xes dans un tableau).
- unshiftline($$)
- RA~XcupA~Xre une ligne du document d'entrA~Xe, ainsi que sa rA~XfA~Xrence.
- pushline($)
- Ajoute une nouvelle ligne dans le document de sortie.
- popline()
- RA~XcupA~Xre (pop) la derniA~Xre ligne poussA~Xe dans le document de sortie.
Marquage des chaA~Xnes A~ traduire
Une fonction est fournie pour gA~Xrer le texte qui doit A~Xtre traduit.- translate($$$)
- ParamA~Xtres obligatoires :
-
- -
- La chaA~Xne A~ traduire
- -
- La rA~XfA~Xrence de cette chaA~Xne (c.-A~ -d., sa position dans le fichier d'entrA~Xe)
- -
- Le type de la chaA~Xne (c.-A~ -d., la description textuelle de son rA~Xle structurel ; utilisA~X dans Locale::Po4a::Po::gettextization() ; consultez A~Xgalement po4a(7), section Gettextization : Comment A~Xa marche ?)
Cette fonction peut A~Xgalement prendre des paramA~Xtres supplA~Xmentaires. Ils doivent A~Xtre organisA~Xs sous forme de table de hachage. Par exemple :-
$self->translate("chaA~Xne","rA~XfA~Xrence","type", 'wrap' => 1);
- wrap
- BoolA~Xen indiquant si on peut considA~Xrer que les espaces des chaA~Xnes ne sont pas importants. Dans ce cas, la fonction crA~Xe une forme canonique de la chaA~Xne avant de rechercher une traduction ou de l'extraire et ajoute des retours A~ la ligne A~ la traduction.
- wrapcol
- La colonne A~ laquelle les retours A~ la ligne doivent avoir lieu (76 par dA~Xfaut).
- comment
- Un commentaire additionnel A~ ajouter A~ l'entrA~Xe du po.
Action :-
- -
- Pousse la chaA~Xne, la rA~XfA~Xrence et le type dans le po de sortie.
- -
- Renvoie la traduction de la chaA~Xne (trouvA~Xe dans po_in) de faA~Xon A~ ce que l'analyseur (parser) puisse construire doc_out.
- -
- GA~Xre les jeux de caractA~Xres pour recoder les chaA~Xnes avant de les envoyer A~ po_out et avant de renvoyer la traduction.
-
Fonctions diverses
- verbose()
- Indique si le mode bavard a A~XtA~X activA~X lors de la crA~Xation du Transtractor.
- debug()
- Indique si l'option de dA~Xbogage a A~XtA~X fournie lors de la crA~Xation du Transtractor.
- detected_charset($)
- Indique A~ TransTractor qu'un nouveau jeu de caractA~Xres (premier paramA~Xtre) a A~XtA~X dA~XtectA~X dans le document d'entrA~Xe. Il est en rA~Xgle gA~XnA~Xral lu dans l'en-tA~Xte du document. Seul le premier jeu de caractA~Xres restera, qu'il soit fourni par les paramA~Xtres de process() ou dA~XtectA~X dans le document.
- get_out_charset()
- Cette fonction retournera le jeu de caractA~Xres qui doit A~Xtre utilisA~X dans le document de sortie (souvent utile pour substituer le jeu de caractA~Xres qui a A~XtA~X dA~XtectA~X dans le document d'entrA~Xe).
Il utilisera le jeu de caractA~Xres spA~XcifiA~X sur la ligne de commande. S'il n'a pas A~XtA~X spA~XcifiA~X, il utilisera le jeu de caractA~Xre du fichier po d'entrA~Xe, et si ce fichier po utilise la valeur par dA~Xfaut AX CHARSET AX, et aucun encodage n'est rA~XalisA~X.
- recode_skipped_text($)
- Cette fonction rA~Xencode le texte donnA~X en paramA~Xtre, du jeu de caractA~Xres du document d'entrA~Xe vers le jeu de caractA~Xres du document de sortie. Ce n'est pas nA~Xcessaire quand les chaA~Xnes sont traduites (translate() rA~Xencode tout d'elle-mA~Xme), mais A~Xa l'est lorsque vous sautez des chaA~Xnes du document d'entrA~Xe et que vous voulez que le document de sortie utilise un encodage uniforme.
DIRECTIONS FUTURES
Une des imperfections du TransTractor actuel est qu'il ne peut pas gA~Xrer de documents traduits contenant toutes les langues, comme les modA~Xles debconf ou les fichier .desktop.Pour rA~Xpondre A~ ce problA~Xme, les seules modifications d'interface nA~Xcessaires sont :
- -
- utiliser une table de hachage pour po_in_name (une liste par langue)
- -
- ajouter un paramA~Xtre A~ traduire pour indiquer la langue cible
- -
- crA~Xer une fonction pushline_all, qui utiliserait pushline pour le contenu de toutes ses langues, en utilisant map :
$self->pushline_all({ "Description[".$code_langue."]=". $self->translate($ligne,$rA~Xf,$code_langue) });
Nous verrons si c'est suffisant ;)
AUTEURS
Denis Barbier <barbier@linuxfr.org> Martin Quinson (mquinson#debian.org) Jordi Vilalta <jvprat@gmail.com>
TRADUCTION
Martin Quinson (mquinson#debian.org)
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre