Többnyelvű webalkalmazások 2

Az előző részben megismerkedtünk a legfontosabb elvi alapokkal amelyek szükségesek ahhoz, hogy több nyelven beszélő webalkalmazásokat hozzunk létre. Most nézzük meg, hogy hogyan néz ki a gettext használata a gyakorlatban.

Előkészítés

Ahogyan azt az előző részben leírtuk a fő előkészítés abból áll, hogy a php filejainkat átalakítjuk úgy, hogy minden többnyelvűsítésre szánt kiíratást a _() függvényhívásokon keresztül hajtunk végre.

Bizonyos alkalmazások más burkoló függvényeket használnak. A wordpress például a __() és a _e() függvényhívásokat használja. Ez nem lesz probléma, de nem szabad megfeledkeznünk róla.

Töltsük le a poedit alkalmazást és telepítsük fel.

Nyelvi fileok létrehozása

Indítsuk el a poedit-et. Ha rendelkezésünkre áll esetleg egy alap .pot file akkor nyissuk azt meg, ha nem akkor pedig válasszuk ki a Fájl / Új katalógus menüt. A program jópár adatot bekér a projekttel kapcsolatban, ezek közül minimálisan az Általános információk lapon meg kell adnunk a projekt nevét és verziószámát, illetve az Elérési útvonalak lapon egy elérési utat. A többi adat kitöltése sem hátrányos, de nem feltétlenül szükséges.

A projekt neveként adjuk meg a nevet, mondjuk egy wordpress plugin esetében a plugin nevét. Ezután az Elérési útvonalak lapon kattintsunk rá az Új bejegyzés ikonra (kis négyzet csilaggal a bal felső sarokban) és pötyögjük (másoljuk) bele a projekt elérési útját. Érdemes teljes elérési utat megadni neki, azaz Linux esetén /home/user/eleresi/ut/a/projekthez, Win esetén pedig C:\eleresi\ut\a\projekthez. Nyomjunk egy entert, az elérési út megjelenik az alsó ablakban.

Ha nem használunk külön burkolókat, azaz csak a _() függvényt használtuk akkor készen is vagyunk a beállításokkal. Ha ez nem igaz, akkor meg kell adnunk a programnak, hogy mi mást kell még a forrásfileokban keresgélnie. Erre való a Kulcsszavak lap. Az új bejegyzés ikon segítségével adjuk meg a wordpress által használt két függvény nevét, vagyis __ enter és _e enter.

Az ok megnyomása után a program kérni fog egy nevet a létrehozandó .po file részére. Adjunk neki egyet. Jó ha a név magában foglalja a projekt nevét, illetve, hogy melyik nyelvről van szó. Tehát ha a pot fileunk, illetve a függvényhívásainkban szereplő szövegek angolul vannak, és most éppen a magyar fordítást kívánjuk hozzá elkészíteni, akkor a .po fileunk nevének célszerű a projekt-hu_HU.po nevet adni.

A Katalógus frissítése ikon segítségével, illetve első alkalommal automatikusan a program szépen végignézi az elérési utaknál megadott könyvtárat és az ott talált forrásfilokból kiszedegeti a nyelvi hivatkozásokat.

Ezután nincs más dolgunk mint darabonként beírni a fordításokat és menteni. Amikor kilépünk a program legenerálja a po és mo fileokat.

Ha tovább dolgozunk a forrás fájlokon akkor időnként meg kell ismételnünk a katalógus frissítését ahhoz, hogy az újonnan felvitt szövegek is belekerüljenek.

Használat

Ezután már csak annyi dolgunk maradt, hogy valahogyan tudassuk az alkalmazásunkkal, hogy itten neki nyelvi fileokat kellene keresnie.
Normál körülmények esetében a setlocale(), bindtextdomain() és textdomain() függvények hívásával tehetjük ezt meg, illetve egy wordpress plugin esetében a load_plugin_textdomain() függvénnyel. Ezeken keresztül állítjuk be, hogy az elérhető nyelvek közül melyiket válassza ki a rendszer, hol keresse a nyelvi fájlokat és melyik domaint (tárolót) használja. Ezen függvények leírása megtalálható a php manualban.

4 thoughts on “Többnyelvű webalkalmazások 2

  1. Nem tud esetleg valaki segíteni, hogy mi lehet ebben a hibás: http://mirox.hu/vend/local.zip
    Már egy ideje szenvedek ezzel a PoEdit-es többnyelvűsítéssel, de csak nem akar működni… (bár egyszer már összejött, de aztán elírtam valamit a kódban (de hogy mit???) és azóta nem akaródzik sikerülni újra)…

  2. Hát ez az, hogy nem tudom, mi lehet a probléma… Szerintem a kódnak így kellene kinéznie, működnie kéne (egyszer már működött is!). Nem tudom hol lehet benne a hiba…

    De itt a php kód, hátha abban van a hiba és valaki kiszúrja:
    <?php
    //header('Content-Type: text/html; charset=utf-8');
    if (putenv('LC_ALL=hu_HU.UTF-8'))
    {
    print("putenv – OK”);
    }
    $setlocale_eredmeny=setlocale(LC_ALL, ‘hu_HU.UTF-8’);
    print(“setlocale eredménye: “.$setlocale_eredmeny.””);

    // Specify location of translation tables
    //$bindtextdomain_eredmeny=bindtextdomain(“messages”, $_SERVER[“DOCUMENT_ROOT”].”/tesztel/local/”);
    $bindtextdomain_eredmeny=bindtextdomain(“messages”, “.”);
    print(“bindtextdomain eredménye: “.$bindtextdomain_eredmeny.””);
    // Choose domain
    $textdomain_eredmeny=textdomain(“messages”);
    print(“textdomain eredmény: “.$textdomain_eredmeny.””);
    print(“a”._(“ehe”).”b”._(“behe”));
    //include(“belso_fileok/valami.php”);
    ?>

    Ha nem, akkor a zip-ben mellékelve van a po és mo file is…

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.