Nejprve musíte PHP informovat, jaké národní prostředí a doménu používáte.
putenv("LANG=da_DK");
setlocale('LC_ALL', "da_DK");
bindtextdomain("mycatalog", "./locale/");
textdomain("mycatalog");
V tomto případě mám dánský překlad a soubor s názvem mycatalog.mo (a .po). Tyto soubory jsou umístěny (z vašeho kořenového adresáře) zde:locale/da_DK/LC_MESSAGES/mycatalog.mo/po
Chcete-li zobrazit svůj překlad, udělejte toto:
echo _("Hello world"); // Which would become "Hej verden"
_(); je alias gettext(); Chytré na gettexts je to, že pokud neexistuje překlad, nebudete mít ve svém uživatelském rozhraní ošklivý jazykový kód jako „MSG_HELLO_WORLD“, ale místo toho lepší alternativu:Jednoduše prostý anglický text.
V souboru messages.po musíte mít všechny zprávy (rozlišují se malá a velká písmena a také s ohledem na použité čárky, tečky, dvojtečky atd.) v tomto formuláři:
msgid "Hello world!"
msgstr "Hej verden!"
Když to přidáte do svého souboru .po, otevřete tento soubor v poeditu, stisknete "Uložit" a vygeneruje se soubor .mo. Tento soubor je nahrán do stejného adresáře jako soubor .po (obvykle něco jako \locale\da_DK\LC_MESSAGES\ z kořenového adresáře skriptu)
K překladu dynamického/variabilního obsahu můžete použít – mimo jiné – sprintf, a to tímto způsobem:
echo sprintf(_("My name is %s"), $name);
V tomto případě se %s objeví v souboru .po; Když máte přeložený řetězec (který obsahuje %s), sprintf se postará o nahrazení %s obsahem proměnné. POKUD musí být proměnná také přeložena, můžete to udělat takto:
echo sprintf(_("The color of my house is %s"), _($color));
Pak nepotřebujete celou větu pro každou barvu, ale i tak dostanete barvy přeložené.
Je důležité poznamenat, že při prvním spuštění .mo na serveru se uloží do mezipaměti - a neexistuje způsob, jak tento soubor odstranit z mezipaměti bez restartování (Apache nebo podobný by měl stačit). To znamená, že jakékoli změny, které v .mo provedete po prvním použití, nebudou účinné. Existuje řada hacků, jak to obejít, ale upřímně řečeno, většinou nejsou moc hezké (zahrnují zkopírování .mo, přidání času () za ním a následné importování a opětovné uložení do mezipaměti). Tento poslední odstavec je důležitý pouze v případě, že nebudete překládat celou věc najednou, ale po částech.
Pokud si chcete v určitém okamžiku vytvořit svůj vlastní překladatelský nástroj, tento nástroj vám pomůže převést .po na .mo pomocí PHP:
http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/