Gettext

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. december 20-án felülvizsgált verziótól ; az ellenőrzések 7 szerkesztést igényelnek .

GNU gettext
Típusú szoftverhonosítás , könyvtár
Szerző Ulrich Drepper
Fejlesztők GNU projekt
Beírva Xi
Operációs rendszer Unix-szerű , Microsoft Windows
Interfész nyelvek orosz és további 37 nyelv
Hardver platform platformközi
legújabb verzió
Olvasható fájlformátumok GNU Gettext gépobjektum (big endian) [d] és GNU Gettext gépobjektum (litte endian) [d]
Generált fájlformátumok GNU Gettext gépobjektum (big endian) [d] és GNU Gettext gépobjektum (litte endian) [d]
Állapot aktív
Engedély
  • könyvtár - LGPL
  • eszközök - GPL
  • Dokumentáció - GFDL /GPL
Weboldal gnu.org/software/gettext/
 Médiafájlok a Wikimedia Commons oldalon

A gettext  egy nemzetköziesítésre szolgáló GNU projektkönyvtár , amelyet széles körben használnak a szabad szoftverekben .

Leírás

A fő különbség a többi hasonló eszközhöz képest az, hogy a gettext az angol eredetijüket használja a fordítható karakterláncok kijelölésére a programszövegben, nem pedig speciális azonosítókat. Így kiderül, hogy a programnak nincs szüksége fordítási fájlokra a felület angol nyelvű megjelenítéséhez. Ez általában kényelmes, mert a legtöbb kifejlesztett alkalmazás már angol nyelven készült.

A gettext többes szám támogatással rendelkezik . Ehhez egy speciális függvényt használnak a program forráskódjában, és két sort adnak meg - egyes számban és többes számban. Amikor egy fordítást egy másik nyelvre cserél le, a fordítási karakterlánc annyi formája kerül felhasználásra, amennyi az adott nyelvhez szükséges. Ehhez a fordítási fájl fejlécének tartalmaznia kell egy nyelvspecifikus kifejezést a fordítási karakterlánc számonkénti kiválasztásához.

A gettext könyvtár feltételezi, hogy a fordítások .mo ( Eng.  Machine Object , a program által könnyen olvasható és a platformra jellemző bináris fájl) vagy .gmo (GNU .mo), .po ( Angol  Portable Object , egy ember által olvasható fájlplatform-független fordítás) és .pot ( a PO-sablon egy   könyvtár, egy .po fájl előkészítése új nyelvre történő fordításhoz). [2] Magukon a fordítási karakterláncokon kívül a .po fájlok fordítói megjegyzéseket és különféle szolgáltatási jeleket is tartalmazhatnak.

A fájlok generálásához és frissítéséhez, amikor a program megváltozik, a gettext könyvtárban található számos segédprogramot kell használnia.

Kezdetben a program forráskódjának sorait a program xgettextegy .pot fájlba (könyvtárba) gyűjti össze. Ezt a fájlt és a fordítási fájlokat a forráskódban megjelenő új és módosított karakterláncokkal frissíti a msgmerge. Ezzel egyidejűleg minden már lefordított karakterlánc mentésre kerül, a már nem használtakat elavultnak, a megváltozottakat pedig pontatlannak ( angolul  fuzzy ) jelöli meg . Alapértelmezés szerint a program nem használja az elavult és pontatlan karakterláncokat. A fordító kényelme miatt van rájuk szükség: sokszor könnyebb egy meglévő, bár elavult fordításra alapozni, mint a teljes kifejezést újra lefordítani.

A program egy adott nyelvre történő fordításának megkezdéséhez a fordító létrehoz egy .po-file-t: a -fájlt a megfelelő helyre másolja .pot, és megváltoztatja benne a címet. Ehhez használhatja a programot msginit. A kész fordítási fájlt a segédprogram .mo fájlokká konvertálja msgfmt. [2] .

Vannak olyan segédprogramok is a fordítók számára, amelyek megkönnyítik a fordítás szerkesztését, például:

A szabványos C alap gettext megvalósításán kívül a C++ , Objective-C , sh / bash scripting , Python , Perl , PHP , GNU CLISP , Emacs Lisp , librep , GNU Smalltalk , Java , Scala számára is léteznek hasonló megközelítésű megvalósítások [3] , GNU awk , Pascal , wxWidgets (a wxLocale osztály használatával), YCP ( YaST2 nyelv ), Tcl , Pike és R , Mono platformnyelvek (Mono.Unix névtér) és a Qt keretrendszerhez . Ezen nyelvek némelyikét közvetlenül támogatják a fent említett segédprogramok. [2] .

A legtöbb nyelv használata hasonló a C nyelv használatához.

Használat

A programozónak

Egyszerű vonalak

A program működése közben a felhasználó számára megjelenített és ennek megfelelően fordítást igénylő karakterláncok a program forráskódjábangettext angolul vannak beírva és függvényhívással ngettextvagy hasonlóval jelölve .

printf ( gettext ( "Szia! A nevem %s. \n " ), név );

Általában a forráskód méretének csökkentése és az olvashatóság javítása érdekében egy rövid függvény szinonimát #define _ gettext(aláhúzást) deklarálnak és használnak. Tehát a hívás a következőre konvertálódik

printf ( _ ( "Szia! A nevem %s. \n " ), név );

A fenti sorban egy ehhez hasonló bejegyzés jelenik meg a könyvtárban az xgettext és az msginit parancsok megfelelő feldolgozása után:

#: src/name.c:36 msgid "Hello! A nevem %s.\n" msgstr "" Többes szám

A többes szám lefordításához a függvényt használjuk ngettext, amely két angol karakterláncot (az egyes és többes számhoz) és egy egész számot vesz paraméterként. PHP - ben a hívás ngettextegy számot tartalmazó karakterlánc kimenetére így néz ki:

printf ( ngettext ( "%d nappal ezelőtt" , "%d nappal ezelőtt" , $daysAgo ), $daysAgo );

Maga a függvény ngettextnem helyettesíti a numerikus értéket %d, ezért a programozónak függvényt printfvagy hasonlót kell meghívnia, hogy a kívánt karakterláncot számmal képezze.

A fordítónak

Egyszerű vonalak

Ezután lefordítja a fájl sorait, például egy orosz fordításhoz:

#: src/name.c:36 msgid "Hello! A nevem %s.\n" msgstr "Szia! A nevem %s.\n" Többes szám

A többes számok fordításához szükséges, hogy a fájl fejléce (ahol az adatok, például Project-Id-Versionés PO-Revision-Date) jelezze .poaz adott nyelv többes szám képzésének szabályát. Például az oroszban a többes szám három formája létezik:

  • 1, 21, 31… nap
  • 2, 3, 4, 22, 23, 24, 32, 33, 34… nap
  • 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, 27, 28, 29, 30, 35, 36… napok

E három forma egyikének kiválasztása a számtól függően a következő képlettel történik [4] :

" Többes számú alakok: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"

A kifejezés itt a C nyelv szintaxisával van írva, és csak a kimeneti számot jelölő pluralváltozóra támaszkodhat .n

Egy ilyen nyilatkozat után az űrlapok 0, 1 és 2 számokat vesznek fel, és a kifejezés fordítása a következő:

msgid " %d days ago" msgid_plural "%d nappal ezelőtt" msgstr [ 0 ] "%d nappal ezelőtt" msgstr[ 1 ] "%d nappal ezelőtt" msgstr[ 2 ] "%d nappal ezelőtt"

A felhasználó számára

A UNIX - szerű operációs rendszereket használó felhasználóknak általában nem kell további lépéseket tenniük egy adott fordítás kiválasztásához. A fordítást egy rendszerváltozó határozza meg LANG, amely általában már be van állítva a kívánt értékre.

Lásd még

Jegyzetek

  1. Haible B. GNU gettext 0.21 megjelent  – ​​2020 .
  2. 1 2 3 A GNU gettext kézikönyv archiválva : 2007. december 5. a Wayback Machine -nél 
  3. makkarpov/scalingua: Egyszerű gettext-szerű nemzetköziesítési könyvtár a Scalához . github.com . Letöltve: 2016. április 28. Az eredetiből archiválva : 2020. április 24.
  4. ↑ Így néz ki egy sor egy .po fordítási fájlban . A sor végén lévő \n sortörést jelent.

Linkek