Ten przykład pokazuje, jak wykorzystać zalety PHPTAL do stworzenia strony w kilku językach.
Co będzie potrzebne?
1. Odpowiednia konfiguracja serwera
a) Serwer musi wspierać gettext (czyli PHP musi zostać skompilowane z parametrem '--with-gettext'
Czy tak jest, sprawdzamy uruchamiając skrypt: <code lang="php"> <?php phpinfo(); ?> </code>
i sprawdzamy czy w 'Configure Command' jest opcja '--with-gettext'.
Jeśli nie ma, trzeba się postarać o to, żeby tam się znalazła. Dla administratora serwera, to chwilka roboty.
b) Serwer musi być skonfigurowany do obsługi danego języka.
Jeśli Twój serwer nie obsługuje danego języka, trzeba sprawdzić konfigurację w pliku /etc/locale.gen
Na Debianie/Ubuntu najlepiej użyć polecenia 'dpkg-reconfigure locales'
2. Będziemy potrzebowali layoutu strony, najpierw w jednym języku, który posłuży jako szablon strony.
Powiedzmy, że będzie wyglądała tak:
--- plik: strona.html
<code lang="xml"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title> miejsce na tytuł strony </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<body> <h1>miejsce na tytuł strony</h1> miejsce na treść strony </body>
</html> </code>
3. Teraz przygotowujemy plik PHP wyświetlający szablon
--- plik: strona.php <code lang="php"> <?php // konfiguracja PHPTAL require_once 'PHPTAL_config.php'; // klasy PHPTAL require_once 'PHPTAL.php'; // klasy PHPTAL odpowiedzialne za tłumaczenie require_once 'PHPTAL/GetTextTranslator.php';
try {
$jezyk = new PHPTAL_GetTextTranslator();
/* w tym miejscu, można dorobić przełączanie języków np. w zależności od tablicy $_GET lub wartości z tablicy $_SESSION */ // określamy jakiego języka używać // w formacie: język_kraj $jezyk->setLanguage('pl_PL', 'pl_PL');
// uczymy gettext, gdzie szukać plików i z jakimi nazwami $jezyk->addDomain('domena', '/sciezka/do/katalogu/z/wersjami/jezykowymi/');
// określenie, której domeny (których plików językowych użyć, jeśli mamy więcej zestawów niż jeden) $jezyk->useDomain('domena');
// tworzymy nowy szablon; $szablon = new PHPTAL('strona.html');
// mówimi szablonowi, którego języka używać $szablon->setTranslator($jezyk); } // obsługa ew. błędu catch (Exception $e){ echo $e; }
Po kompilacji wszystkich słowników, mamy w każdym katalogu po dwa pliki: domena.po i domena.mo
5. Kolejnym krokiem, jest modyfikacja szablonu HTML, tak aby strona wyświetlana była w danym języku.
Po modyfikacji nasz szablon będzie wyglądał mniej więcej tak:
--- plik: strona.html <code lang="xml"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <title i18n:translate="nazwa_tekstu1"> miejsce na tytuł strony </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<body> <h1 nazwa_tekstu1>miejsce na tytuł strony</h1> <span i18n:translate="nazwa_tekstu2">miejsce na treść strony</span> </body>
</html> </code>
Cała sprawa skupia się na dodaniu do tagu:
<code> i18n:translate="nazwa_tekstu" </code>
gdzie 'nazwa_tekstu' jest msgid użytym w plikach .ro