Wielu zapewne z Was zastanawiało się w jaki sposób zrobić swoją stronę, lub danego cms’a wielojęzycznego, no i za pomocą przychodzi nam bardzo proste w obsłudze narzędzie na licencji GNU GPL, gettext, konfiguracja też jest banalnie prosta, ale że dziś do swoich narzędzi pracy, dorzuciłem to, więc postanowiłem się z Wam podzielić gotową klasą:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | <?php /** * @li gnu/agpl v3 or leter * @code utf8 * @version 0.1 * @author cojack from Aichra.pl * @date 28.06.09 * **/ final class Language { private $_handler; private $_lang; private $_language = array (); public function __construct($lang, $hand) { $this->_lang = $lang; if ($hand == '') $this->_handler = 'index'; else $this->_handler = $hand; $this->_language = array ('pl' => 'pl_PL', 'en' => 'en_US'); } public function setLanguage() { setlocale(LC_MESSAGES, $this->_language[$this->_lang] . ".utf8", $this->_language[$this->_lang] . ".UTF8", $this->_language[$this->_lang] . ".utf-8", $this->_language[$this->_lang] . ".UTF-8", $this->_language[$this->_lang] ); bindtextdomain($this->_handler,'language'); textdomain($this->_handler); bind_textdomain_codeset($this->_handler, 'UTF-8'); } } ?> |
Jak możecie zauważyć mój każdy kod jest do siebie podobny, w prawie każdym jest jakiś handler. A to dlatego że buduję sobie narzędzie dzięki któremu będzie mi łatwiej później tworzyć strony, jak się ma ścieżka do lokalizacji pliku? A nijak bo plik i tak jest wykonywany z index.php więc ścieżka do dokumentów językowych jest to katalog w którym znajduję się index.php o nazwie: ‘language’ a w nim są odpowiednio katalogi językowe np pl a w nim dodatkowo jest jeszcze katalog LC_MESSAGES (taka struktura unixowa).
Jak utworzyć plik *.po ?
Żeby utworzyć ten plik musimy wpisać w konsoli (najlepiej w katalogu LC_MESSAGES bez znaczenia jaki jezyk)
xgettext -n /pelna/sciezka/do/naszego/pliku/php/z/funkcjami/tlumaczacymi/tekst.php
po wpisaniu wpiszemy ls i powinniśmy mieć plik: messages.po, do edycji ja używałem poedit, ale można i nano, kate etc.. tylko tyle że poedit zanast przekonwertuje plik do *.mo, nie wiem jak z konsoli przekonwertować do *.mo, ale pewnie manual wie
Można nie ruszony plik *.po przenieść do drugiego katalogu językowego, by mieć czysty dobry plik do tłumaczenia.
Parę słów na koniec.
Akurat używam tego wraz z smartami i pluginem dla smartów (google: smaryt + gettext 1 link).
Jak przechowuję adres? W Url, mógłbym pokazać swoją klasę do Routingu, ale jest tak prymitywna że aż wstyd, więc na razie nie
Dużo pracy mnie jeszcze czeka by to wszystko zaczęło mieć ręce i nogi.


%H:%i
gettext to syf – ma problemy z rożnymi serwerami – Linux vs Windows, poza tym nie jest zawsze dostępny
dużo lepszym rozwiązaniem jest zrobić sobie samemu klasy/funkcje do obsługi wielojęzykowości.
Polecam oglądnąć sobie rozwiązania stosowane w Kohanie i Lithium.