Przede wszystkim musisz poinformować PHP, jakiego języka i domeny używasz.
putenv("LANG=da_DK");
setlocale('LC_ALL', "da_DK");
bindtextdomain("mycatalog", "./locale/");
textdomain("mycatalog");
W tym przypadku mam duńskie tłumaczenie i plik o nazwie mycatalog.mo (i .po). Te pliki są umieszczone (z Twojego katalogu głównego) tutaj:locale/da_DK/LC_MESSAGES/mycatalog.mo/po
Aby pokazać swoje tłumaczenie, zrób tak:
echo _("Hello world"); // Which would become "Hej verden"
_(); jest aliasem gettext(); Sprytną rzeczą w gettexts jest to, że jeśli nie ma tłumaczenia, nie będziesz miał brzydkiego kodu języka, takiego jak „MSG_HELLO_WORLD” w interfejsie użytkownika, ale zamiast tego lepszą alternatywę:po prostu zwykły tekst w języku angielskim.
W pliku messages.po musisz mieć wszystkie wiadomości (z uwzględnieniem wielkości liter oraz użytych przecinków, kropek, dwukropków itp.) w tym formularzu:
msgid "Hello world!"
msgstr "Hej verden!"
Po dodaniu tego do pliku .po otwórz ten plik w poedit, naciśnij „Zapisz”, a wygeneruje plik .mo. Ten plik jest przesyłany do tego samego katalogu, co plik .po (zazwyczaj coś takiego jak \locale\da_DK\LC_MESSAGES\ z katalogu głównego skryptu)
Do tłumaczenia dynamicznych/zmiennych treści możesz użyć między innymi sprintf, w ten sposób:
echo sprintf(_("My name is %s"), $name);
W takim przypadku %s pojawi się w pliku .po; Gdy masz przetłumaczony ciąg (zawierający %s), sprintf upewni się, że zamienisz %s na zawartość zmiennej. JEŚLI zmienna również musi zostać przetłumaczona, możesz to zrobić:
echo sprintf(_("The color of my house is %s"), _($color));
Wtedy nie potrzebujesz pełnego zdania dla każdego koloru, ale nadal otrzymujesz tłumaczenie kolorów.
Ważne jest, aby pamiętać, że przy pierwszym uruchomieniu .mo na serwerze jest buforowany - i nie ma możliwości usunięcia tego pliku z pamięci podręcznej bez ponownego uruchomienia (Apache lub podobny powinien wystarczyć). Oznacza to, że wszelkie zmiany wprowadzone w .mo po pierwszym użyciu nie będą skuteczne. Istnieje wiele hacków, które można obejść, ale szczerze mówiąc, w większości nie są one zbyt ładne (obejmują kopiowanie .mo, dodanie za nim time(), a następnie zaimportowanie i ponowne buforowanie). Ten ostatni akapit ma znaczenie tylko wtedy, gdy nie zamierzasz tłumaczyć całości na raz, ale fragmentami.
Jeśli w pewnym momencie chcesz stworzyć własne narzędzie do tłumaczenia, to narzędzie pomoże Ci przekonwertować .po na .mo za pomocą PHP:
http://www.josscrowcroft.com/2011/code/php-mo-convert-gettext-po-file-to-binary-mo-file-php/