O všem co potřebuji sdělit světu :)

Gettext lokalizace PHP

Lokalizace PHP webových stránek není úplně jednoduchá věc a lokalizovat musíte hned několik věcí zároveň. Musíte lokalizovat obsah databáze, PHP skripty, šablony, javascript a obrázky.

Pokud jde o databázi, tam jednoduše musíte mít rozdílný obsah pro rozdílné jazyk. V případě šablon, záleží na šablonovacím jazyku (u Albirea musíte mít pro každý jazyk svoji šablonu a v Nette doporučuji použít filter Translate ve spojení s GettextExtractor), obrázky s textem musíte vytořit pro každý jazyk zvlášť a pro JavaScript jsem optimální řešení ještě nenašel.

Překlad PHP skriptů se většinou řeší buď pomocí konstant (joomla) nebo pomocí nástroje GNU gettext (Albireo IS ;-), gettext však není úplně triviální na zprovoznění.

Jak funguje gettext

Gettext je dostupný jako rozšíření PHP (ale podporuje i spoustu dalších programovacích jazyků). Ve své PHP aplikaci budete muset na začátku nastavit několik věcí a následně všechny texty obalit překladovou funkcí.

Gettext vám umožní všechny texty z PHP skriptů následně vyextrahovat do speciálního souboru a vy (případně váš překladatel) je přeložíte a v binární formě umístíte zpět do aplikace.

Kupodivu gettext nijak výrazně aplikaci nezpomaluje, což je dobře.

Zprovoznění gettextu v PHP

Gettext v PHP zapnete povolením rozšíření gettext, které je součástí PHP.

Dále si doporučuji stáhnout nástroj Poedit, který vám umožní se soubory gettext překladů pracovat pomocí desktopové aplikace a vyhnete se tím příkazové řádce.

Následně přichází mocná magie nastavení PHP pro práci s gettextem. Někde na začátku aplikace (klidně v index.php) musíte provést tato nastavení:

// jazyk aplikace preferovaný uživatelem
$language = "cs";
$codeset = "cs_CZ.UTF-8"

// doména s překlady (ovlivňuje jméno souboru s překladem)
$domain = "messages";

// nastavení jazyku (ovlivňuje jméno složky, kde bude hledán překlad pro jazyk)
putenv ( "LANG=" . $language );

// nastavuje kódování na UTF-8
bind_textdomain_codeset($domain, "UTF8");

// nastavuje jazykové prostředí
setlocale(LC_ALL, $codeset);

// nastavuje cestu k adresáři s lokalizacemi
bindtextdomain($domain, realpath("locale"));

// spustí doménu s překlady
textdomain($domain);

Podle tohoto nastavení budete muset uložit soubor s gettext překladem na adresu:
./locale/cs/LC_MESSAGES/messages.mo

Pokud gettext nenajde soubor s překladem nebo mu schází překlad nějakého textu, jednoduše vrátí text v původním tvaru v aplikaci. Nedochází k vyvolání žádné chyby.

Gettext v kódu

V PHP musíte všechny texty obalit pomocí funkce gettext nebo jejiho aliasu _.

echo "translate me please";

se změní na

echo _("translate me please");

Nedoporučuji používat volání proměnných způsobem

echo _("translate the $variable");

lepší je používat funkce printf a sprintf

printf (_("translate the %s"),$variable);

Gettext - závěrem

Gettext je skvělý nástroj. Jakmile se vám podaří jej jednou nastavit, už se  s ním pracuje dobře. Jeho nastavování však může být noční můrou, proto doufám, že můj návod někomu pomůže.

V případě problémů můžete dávat dotazy sem do komentářů.


Počet komentářů: 0



hash


Share this article: 
  • Sdílet na Facebooku
  • Sdílet na Twitteru
  • Sdílet na linkuj.cz
  • Přidat do záložek Googlu
  • Sdílet na linkedin
  • Sdílet na del.icio.us