A legtöbb ember számára az a kérdés, hogy “Neked melyik a kedvenc Gettext PO editor-od?” ahhoz hasonló, mint ha azt kérdeznék tőle, hogy mikor a legjobb fogorvoshoz menni… Sajnos már nem emlékszem, hol olvastam ezt a kis szösszenetet, de kiválóan jellemezte az én érzéseimet is, amikor először szembekerültem a WordPress témák és bővítmények “korrekt” magyarítási eljárásának buktatóival.

A “korrekt” szó jelen esetben azért van idézőjelben, mert amikor korábban arról írtam, hogy hogyan lehet a “magyarul nem tudó” sablonokat mégis rávenni, hogy magyarul “szóljanak” a honlapunk látogatóihoz, akkor azt a megoldást javasoltam, hogy magában a kódban (a php fájlokban) írjuk át a megjelenő angol nyelvű üzeneteket magyarra. Néhányan ekkor megróttak, hogy ez nem helyes eljárás, hiszen ha az adott sablont vagy bővítményt frissítik, kezdhetjük elölről az egész munkát. A korrekt eljárás az lenne, ha a nyelvi fájlokat fordítanám le, mert azok függetlenek a php fájloktól, így nem gond a későbbi frissítés sem.

A probléma csak az volt, hogy ezekhez a sablonokhoz és bővítményekhez nem voltak nyelvi fájlok.

Hogy az elejéről kezdjem a történetet (és elnézést, de egy kicsit most muszáj “technikainak” lennem), a WordPress fejlesztői gondoltak arra, hogy rendszerük minél több ember számára használható legyen, anélkül azonban, hogy nekik kellene a világ valamennyi nyelvét beszélniük. Ez a címben említett globalizáció; a lokalizáció pedig a saját nyelvünkre való lefordítást jelenti. Ehhez a fejlesztők a nyílt forráskódú illetve ingyenes szoftverek szokásos lokalizációs eszközét, a GNU gettext eljárást választották.

Az eljárásnak három lépése van.

Az elsőnek a lényege, hogy a WordPress motor, valamint a szabályt betartó sablonok és bővítmények a php nyelv két függvényét használják: az egyik, a __($message) nem magát a szöveget, az “üzenetet” írja ki, hanem azt változóként adja át egy másik függvénynek; a másik, a _e($message) egyenesen a képernyőre ír. Mindkettő esetében a rendszer megpróbál fordítást keresni a $message-hez, és ha talál ilyet, akkor azt a szöveget írja ki, ha nem, akkor magát a $message-et.

A második lépésben egy program végigpásztázza a php fájlokat, és kiszedi a forráskódból az összes $message-et, amelyet a __() vagy a _e() függvények zárójelei között talál. Ebből készít egy speciálisan formázott fájlt, az úgynevezett POT (Portable Object Template) fájlt. Ha le akarsz fordítani egy sablont vagy bővítményt, ez az első, amelyet keresned kell. (Vigyázz, ha Microsoft Office van a gépeden, a .pot fájlokat diavítetítésnek hiszi a géped!)

A harmadik lépésben lesz szükségünk a bevezetőben emlegetett Gettext PO editor programra. Ezekből számos található az interneten, leggyakrabban a Poedit nevűt szokták ajánlani, én is ezt teszem. Ez a program egy könnyen kezelhető felületen tárolja mind az eredeti angol, mind a lefordított szöveget, egy PO (Portable Object), azaz .po kiterjesztésű fájlban, amelyet a .pot alapján készít elő. Ez tehát egy szerkeszthető, átírható fájl, amelyet bármikor a magad képére formálhatsz (tehát ha például létezik magyar fordítás, de tegező, Te viszont magázódót akarsz, át tudod írni magadnak). Minden alkalommal, amikor elmented a .po fájlodat, automatikusan keletkezik egy gépi nyelvre lefordított MO (Machine Object) fájl is – és ez az, amelyet végül is használni fog a rendszer. A gépi nyelvre fordítás azért szükséges, mert ennek a használata sokkal gyorsabbá teszi a rendszert, mint ha szövegesen kellene keresgélnie.

Magához a fordításhoz tehát a .po-ra van szükséged, a tárhelyedre azonban elegendő a .mo fájlt feltölteni.

A .po és .mo fájlok neve tartalmazhatja a bővítmény nevét is, például antivirus-hu_HU.po, de sokszor egyszerűen csak hu_HU.po a fájl neve. A magyar nyelvre utaló két hu közül az első, a kisbetűs a nyelvet, a második, a nagybetűs az országot jelzi, nálunk a kettő nyilván ugyanaz, de például a spanyol esetében van es_ES és es_PE is, az előbbi Spanyolországra, az utóbbi Perura vonatkozik.

Minderről további, részletes leírást olvashatsz a WordPress dokumentációjában ide kattintva, illetve az eljárással foglalkozik többek között Urban Giraffe és a Weblog Tools Collection cikke is (mindhárom angol nyelven van).

Ha pedig a kiválasztott sablonhoz, bővítményhez nem tartozik sem .pot, sem .po fájl, marad az, hogy beleturkászol a php kódba 🙂

 

Az általam lefordított sablonok és bővítmények .po és .mo fájljai, illetve az ilyenekkel nem rendelkező, egy-két fájlból álló bővítmények magyar nyelvre átírt php fájljai ingyenesen letölthetőek erre a linkre kattintva. (A gyűjtemény folyamatosan frissül.)