Translacje w CakePHP
Mechanizm translacji w Cake’u polega na na zastępowaniu tekstów, które maja się pojawić na stronie, ich odpowiednikami z pakietu językowego. W tym celu, w miejscu gdzie ma być wyświetlony tekst, używamy funkcji __ (dwa podkreślenia), a jako argument podajemy tekst będący tagiem (najlepiej w języku angielskim). Funkcja __ wykonuje automatycznie echo, jeśli chcemy jednak, żeby zwróciła tekst, trzeba podać drugi argument ustawiony na true. Jest to przydatne jeśli w tekście umieszczamy jakiś parametr, który zostanie później zastąpiony, np:
$url=Router::url( array('controller'=>'admins', 'action'=>'newpass', $data['Admin']['id'], $data['Admin']['code']), true);
$link = $html->link($url, $url);
$password = $data['Admin']['new_password'];
echo str_replace( array('%link%', '%password%'), array($link, $password ), __('Your new password is %password%, to enable it, clik on link %link% to enable it.', true));
W app znajduje się katalog locale na słowniki. Tworząc np. polską wersję należy utworzyć w nim podkatalog pol, a w nim LC_MESSAGES, w którym muszą znaleźć się 3 pliki:
- POT – lista tagów, do której dopisujemy wszystkie słowa z naszej strony
- PO – lista przetłumaczonych tagów
- MO – nico inna postać pliku po
Nie trzeba wszystkich tagów wprowadzać ręcznie do pliku POT. Wystarczy odpalić konsolę Cake’a z poleceniem i18n. Skrypt pozbiera prawie wszystkie słowa z strony i utworzy nam plik POT. Nowe, można do niego bez problemu dopisywać.
Następnie będzie nam potrzebny program poEdit do pobrania z strony: http://www.poedit.net/
Trzeba w nim utworzyć nowy projekt i dodać do niego plik POT. W edytorze pojawi się lista naszych tagów z możliwością dodania tłumaczeń dla każdego z nich. Jeśli dodamy jakieś nowe tagi do pliku POT, wystarczy wtedy użyć opcji Aktualizuj z pliku POT z menu katalog. Program poEdit przy zapisie sam tworzy plik MO.
Ostatnią rzeczą jaką nam zostało zrobić to rozpoznawanie wersji językowej. Najprościej umieszczać kolejne wersje strony w katalogach o nazwie skrótowej danego języka np.: pl, en, de. Wtedy można także dla każdej wersji korzystać z osobnych katalogów z obrazkami i nieco innymi stylami, bardzo przydatne jeśli mamy wersję hebrajską lub chińską i trzeba zmienić kierunek tekstu. Dzięki temu możemy rozpoznać jaką wersję językową użyć i jak ustawić Config.language:
Configure::write('Config.language', strtolower(WEBROOT_DIR));
Proste prawda?
czwartek, 23 Lipiec 2009
Facebook
GoldenLine
LinkedIn