LOCALE::PO4A::TRANSTRACTOR.3PM(1) User Contributed Perl Documentation NUME Locale::Po4a::TransTractor - trans(lator -- ex)tractor generic. DESCRIERE Scopul proiectului po4a (PO pentru orice) este de a u>ura traducerile (>i mai interesant, intre>inerea traducerilor) folosind instrumente gettext in domenii in care nu erau a>teptate, cum ar fi documenta>ia. Aceasta clasa este stramo>ul fiecarui analizator po4a utilizat pentru a analiza un document, pentru a cauta >iruri traductibile, pentru a le extrage intr-un fi>ier PO >i pentru a le inlocui cu traducerea lor in documentul de ie>ire. Mai formal, acesta prime>te urmatoarele argumente ca intrare: - un document de tradus; - un fi>ier PO care con>ine traducerile care urmeaza sa fie utilizate. Ca ie>ire, produce: - un alt fi>ier PO, care rezulta din extragerea >irurilor traductibile din documentul de intrare; - un document tradus, cu aceea>i structura ca cel de la intrare, dar cu toate >irurile traductibile inlocuite cu traducerile gasite in fi>ierul PO furnizat la intrare. Iata o reprezentare grafica a acestui lucru: document intrare --\ /---> Document ie>ire \ / (tradus) +--> func>ia parse() -----+ / \ PO intrare --------/ \---> PO ie>ire (extras) FUNC>II PE CARE ANALIZATORUL TREBUIE SA LE SUPRASCRIE parse() Aici are loc toata munca: analizarea documentelor de intrare, generarea rezultatelor >i extragerea >irurilor traductibile. Acest lucru este destul de simplu folosind func>iile furnizate prezentate in sec>iunea FUNC>II INTERNE de mai jos. Consulta>i >i sec>iunea SINOPSIS, care prezinta un exemplu. Aceasta func>ie este apelata de func>ia process() de mai jos, dar daca alege>i sa utiliza>i func>ia new() >i sa adauga>i manual con>inut documentului, va trebui sa apela>i aceasta func>ie. docheader() Aceasta func>ie returneaza antetul pe care ar trebui sa il adaugam documentului produs, citat corespunzator pentru a fi un comentariu in limba >inta. Consulta>i sec>iunea Educarea dezvoltatorilor cu privire la traduceri, din po4a(7), pentru a afla la ce este buna aceasta func>ie. SINOPSIS Urmatorul exemplu analizeaza o lista de paragrafe care incep cu ,,
". De dragul simplita>ii, presupunem ca documentul este bine formatat, adica ca etichetele ,,
" sunt singurele etichete prezente >i ca aceasta eticheta se afla chiar la inceputul fiecarui paragraf. sub parse { my $self = shift; PARAGRAPH: while (1) { my ($paragraph,$pararef)=("",""); my $first=1; my ($line,$lref)=$self->shiftline(); while (defined($line)) { if ($line =~ m/
/ && !$first--; ) { # Nu este prima data cand vedem
. # Repune>i linia curenta in intrare, # >i pune>i paragraful construit la ie>ire. $self->unshiftline($line,$lref); # Acum ca documentul este format, traduce>i-l: # - Elimina>i eticheta de inceput $paragraph =~ s/^
//s; # - Introduce>i pentru a afi>a eticheta de inceput (netradusa) # >i restul paragrafului (tradus) $self->pushline( "
"
. $self->translate($paragraph,$pararef)
);
next PARAGRAPH;
} else {
# Adauga>i la paragraf
$paragraph .= $line;
$pararef = $lref unless(length($pararef));
}
# Reini>ializa>i bucla
($line,$lref)=$self->shiftline();
}
# Nu a>i ob>inut o linie definita? Sfar>itul fi>ierului de intrare.
return;
}
}
Odata ce a>i implementat func>ia de analizare, pute>i utiliza
clasa dvs. de documente, folosind interfa>a publica prezentata in
sec>iunea urmatoare.
INTERFA>A PUBLICA pentru scripturile care utilizeaza analizatorul dvs.
Constructor
process(%)
Aceasta func>ie poate face tot ce ave>i nevoie sa face>i cu
un document po4a intr-o singura invocare. Argumentele sale trebuie
sa fie impachetate ca o serie de elemente asociative. AC>IUNI:
a. Cite>te toate fi>ierele PO specificate in po_in_name
b. Cite>te toate documentele originale specificate in
file_in_name
c. Analizeaza documentul
d. Cite>te >i aplica toate actele adi>ionale (addendele)
specificate
e. Scrie documentul tradus la file_out_name (daca este dat)
f. Scrie fi>ierul PO extras la po_out_name (daca este dat)
ARGUMENTE, in afara de cele acceptate de new() (cu tipul
a>teptat):
file_in_name (@)
Lista de nume de fi>iere din care trebuie sa citim documentul
de intrare.
file_in_charset ($)
Setul de caractere utilizat in documentul de intrare (daca nu
este specificat, se utilizeaza UTF-8).
file_out_name ($)
Numele fi>ierului in care trebuie sa scriem documentul de
ie>ire.
file_out_charset ($)
Setul de caractere utilizat in documentul de ie>ire (daca nu
este specificat, se utilizeaza UTF-8).
po_in_name (@)
Lista de nume de fi>iere din care trebuie citite fi>ierele
PO de intrare, care con>in traducerea ce va fi utilizata
pentru a traduce documentul.
po_out_name ($)
Numele fi>ierului in care trebuie sa scriem fi>ierul PO de
ie>ire, care con>ine >irurile extrase din documentul de
intrare.
addendum (@)
Lista de nume de fi>iere din care trebuie sa citim addenda.
addendum_charset ($)
Setul de caractere pentru addenda.
new(%)
Creeaza un nou document po4a. Op>iuni acceptate (in seria de
elemente asociative trecuta ca parametru):
verbose ($)
Stabile>te nivelul de detaliere al informa>iilor.
debug ($)
Define>te depanarea.
wrapcol ($)
Coloana la care ar trebui sa incadram textul in documentul de
ie>ire (implicit: 76).
Valoarea negativa inseamna sa nu se incadreze liniile deloc
(fara intreruperi de linie).
De asemenea, accepta urmatoarele op>iuni pentru fi>ierele Po
subiacente: porefs, copyright-holder, msgid-bugs-address,
package-name, package-version, wrap-po.
Manipularea fi>ierelor de documente
read($$$)
Adauga un alt document de intrare de date la sfar>itul matricei
existente "@{$self->{TT}{doc_in}}".
Aceasta func>ie are doua argumente obligatorii >i unul
op>ional.
* Numele fi>ierului care urmeaza sa fie citit pe disc;
* Numele care trebuie utilizat ca nume de fi>ier la construirea
referin>ei in fi>ierul PO;
* Setul de caractere care trebuie utilizat pentru a citi
fi>ierul respectiv (UTF-8 in mod implicit)
Aceasta matrice "@{$self->{TT}{doc_in}}" con>ine datele acestui
document de intrare
ca o matrice de >iruri de caractere cu semnifica>ii
alternante.
* >irul $textline con>ine fiecare linie a datelor text de
intrare.
* >irul "$filename:$linenum" con>ine loca>ia acestuia >i
se nume>te
,,referin>a" ("linenum" incepe cu 1).
Va rugam sa re>ine>i ca aceasta nu analizeaza nimic. Ar trebui
sa utiliza>i func>ia parse() atunci cand a>i terminat cu
impachetarea fi>ierelor de intrare in document.
write($)
Scrie documentul tradus in fi>ierul specificat.
Aceste date de document traduse sunt furnizate de:
* "$self->docheader()" care con>ine textul antetului pentru
modul >i
* "@{$self->{TT}{doc_out}}" care con>ine fiecare linie a
textului principal tradus in matrice.
Manipularea fi>ierelor PO
readpo($)
Adauga con>inutul unui fi>ier (al carui nume este trecut ca
argument) la PO de intrare existent. Con>inutul vechi nu este
eliminat.
writepo($)
Scrie fi>ierul PO extras la numele de fi>ier dat.
stats()
Returneaza cateva statistici despre traducerea efectuata pana in
prezent. Va rugam sa re>ine>i ca nu sunt acelea>i statistici
ca cele afi>ate de <