gettext

De la Wikipedia, enciclopedia liberă
Salt la: Navigare, căutare
gettext
Dezvoltator Proiectul GNU
Sistem de operare Cross-platform
Tip bibliotecă
Licență GPL
Disponibil în română Yes check.svg
Site web http://www.gnu.org/software/gettext/

gettext este o bibliotecă de programe pentru sistemul de operare GNU folosită pentru așa numita internaționalizare (denumită pe scurt i18n, de la cuvântul englez internationalization, format din literele i, 18 litere intermediare și litera n la sfârșit). Internationalizarea este la rândul ei un design special de soft, astfel ca acesta să permită adaptarea la diverse limbi (naturale) fără modificarea algoritmilor. Este folosită foarte des în programele multilingve. Versiunea actuală este 0.17.

Programare[modificare | modificare sursă]

Pentru majoritatea limbajelor de programare folosirea bibliotecii gettext se face înglobând textele de afișat în apelul funcției gettext. Pentru reducerea tastării și a dimensiunii codului, de obicei este disponibil și un alias al acestei funcții și anume _, astfel încât codul C

printf("My name is %s.\n", numele_meu);

devine

printf(_("My name is %s.\n"), numele_meu);

gettext folosește apoi textele drept chei de căutare a unor traduceri; dacă nu sunt disponibile traduceri pentru cheia respectivă, este returnat textul original. Acest lucru nu se întâmplă în cazul unor sisteme ca catgets sau uzul LoadString sub Microsoft Windows, unde în asemenea cazuri este returnat un ID (de obicei numeric).

Pe lângă C, GNU gettext are implementări și în următoarele limbaje: C++, Objective-C, sh script, bash script, Python, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, GNU awk, Pascal, wxWidgets (prin clasa wxLocale), YCP (limbajul YaST2), Tcl, Perl, PHP, Pike, Ruby și limbajul R. Utilizarea este similară cu cea din C.

xgettext este aplicat la texte sursă pentru a produce un fișier de tip .pot, un model care conține o listă de texte traductibile extrase din surse. Pentru exemplul anterior o intrare în fișierul .pot ar arăta astfel:

#: src/nume.c:36
msgid "My name is %s.\n"
msgstr ""

Comentariile sunt plasate direct înainte de texte și sunt vizibile de traducători sub forma unor sugestii:

/// TRADUCĂTORI: Lăsați %s așa cum este, va fi înlocuit cu un nume.
/// Vă mulțumesc pentru contribuția dumneavoastră.
printf(_("My name is %s.\n"), numele_meu);

În acest exemplu, comentariul începe cu /// și este interpretat de xgettext în timpul construirii fișierului model .pot pentru a extrage aceste comentarii.

xgettext --add-comments=///

Fișierul .pot va arăta astfel:

#. TRADUCĂTORI: Lăsați %s așa cum este, va fi înlocuit cu un nume.
#. Vă mulțumesc pentru contribuția dumneavoastră.
#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

Traducere[modificare | modificare sursă]

Traducătorul obține din model un fișier cu formatul .po folosind comanda msginit, apoi începe să umple spațiile libere cu traduceri. Iată un exemplu de utilizare a comenzii msginit pentru a creea un fișier pentru limba română:

msginit --locale=ro --input=nume.pot

Această comandă va creea fișierul ro.po. Rezultatul este asemănător modelului, dar cu un antet specific limbii române.

#: src/name.c:36
msgid "My name is %s.\n"
msgstr ""

Traducătorul va trebui să editeze acest fișier în mod „manual” cu un editor simplu de texte sau cu o unealtă de traducere, cum e Poedit. Iată cum va arăta fișierul după completarea traducerii:

#: src/name.c:36
msgid "My name is %s.\n"
msgstr "Numele meu este %s.\n"

În final fișierele .po sunt compilate în format binar (fișiere cu formatul .mo) cu ajutorul comenzii msgfmt, lucru ce face parte din compilarea programului și nu trebuie făcut de traducător.

Folosire[modificare | modificare sursă]

Utilizatorii de pe sisteme de tip Unix au această bibliotecă instalată în mod implicit. Prin setarea variabilei de mediu LC_MESSAGES, programele vor afișa mesajele în limba specificată în această variabilă; cu condiția să existe un fișier .mo.

Legături externe[modificare | modificare sursă]