Pri izradi internet aplikacija pomoću jednog od najpopularnijeg za to namenjenog jezika - PHPa[1], često se susrećemo sa problemom lokalizacije same aplikacije. Najčešće korišćeno rešenje, ujedno i najjednostavnije za realizaciju jeste korišćenje tako odomaćenih „lang datoteka“. Naime, u jednoj php datoteci definišemo niz elemenata (bilo imenovani ili ne) sa stringovima koje treba lokalizovati i onda umesto pisanja samog stringa u php kodu, koristimo indeks datog niza. Mana ovog pristupa jeste nepodržavanje za oblike množine (svaki moramo posebno definisati novim indeksom niza), nečitljivost koda, laka greška u zapisu samog niza…

Drugi korak u lokalizaciji može biti pravljenje posebnih šablona za svaki jezik (pomoću Smarty sistema šablona ili ekvivalenta) gde bismo definisali sve jezički zavisne celine u samom šablonu. Međutim, prevođenje je dosta kompleksno jer ma koliko to mi želeli sami stringovi se mešaju sa jezikom za označavanje ili sa programskim delom šablona koji definiše oblike množine i slično.

Ukoliko ste se ikada susreli sa GNU gettext bibliotekom svakako ste primetili prednosti korišćenja iste. Laka ekstrakcija stringova iz php datoteka, očuvanje čitljivosti koda (u kodu ostaje string, uokviren _() funkcijom, a ne nekakav indeks nekog niza), stringovi za prevod su potpuno ekstraktovani a za samo prevođenje postoje razni alati. Sama gettext biblioteka podržava oblike množine, ukoliko neki string nije preveden ostaće u originalu, podržava dodavanja dinamičkih vrednosti unutar stringa (poput printf funkcije) i slično. Kako sam negde pročitao, ko jednom krene da radi sa gettext-om, uvek radi sa gettext-om.

PHP poseduje podršku za gettext, ukoliko je kompajliran sa parametrom –with-gettext, što najčešće nije slučaj. Proverite phpinfo(), možda imate sreće. Ukoliko pak nemate sreće, možete prekompajlirati gettext za ciljni sistem i instalirati ga u CGI direktorijum, zatim učitati php modul preko funkcija za dinamičko učitavanje ili prekompajlirati ceo php i .htaccess-om podesiti izvršavanje. E sada, ni ovo najčešće zbog sigurnosnih podešavanja neće raditi. Zato je potrebno naći neku alternativu za gettext, koja ima mogućnosti gettext-a.

Danilo Šegan je danas objavio PHP-Gettext biblioteku (i sam kaže da inventivniji u imenu nije mogao biti ;) ), koja podržava standardne GNU Gettext MO datoteke, koje se generišu iz PO datoteka. U samom paketu postoje i primeri koda, i README pa neću prenositi. Ono što može da zasmeta jeste brzina izvršavanja, ali za manje projekte to nije opasno.

[1] PHP pročitano u ćirliličnom pismu (velikim slovima) označava skraćenicu od Radi-Ne-Radi. (Danilo Šegan)