Autor wpisu: matipl, dodany: 08.02.2011 09:01, tagi: php
 Wstępnie chciałem napisać o lokalizacji, aby zaprezentować Wam jak można wykorzystać application.ini zamiast tworzyć własne zasoby (resource). Ale z drugiej strony może nie każdy wie jakie to proste w dzisiejszych czasach zrobić serwis wielojęzyczny z tłumaczeniem nie tylko statycznych napisów, ale również nawigacji czy lokalizacją kwot.
 Wstępnie chciałem napisać o lokalizacji, aby zaprezentować Wam jak można wykorzystać application.ini zamiast tworzyć własne zasoby (resource). Ale z drugiej strony może nie każdy wie jakie to proste w dzisiejszych czasach zrobić serwis wielojęzyczny z tłumaczeniem nie tylko statycznych napisów, ale również nawigacji czy lokalizacją kwot.
Do tłumaczeń korzystam z gettext (pliki .mo i .po). Moje pliki językowe znajdują się w project/languages i wygląda to tak:
matipl@host:~/project/languages$ ls en_GB.mo en_GB.po pl_PL.mo pl_PL.po
Gdy mamy stworzone własne tłumaczenia pora na skonfigurowanie zasobu translate w application.ini:
resources.translate.registry_key = "Zend_Translate" resources.translate.adapter = "gettext" resources.translate.content = APPLICATION_PATH "/../languages/" resources.translate.options.scan = "filename" resources.translate.disableNotices = false resources.translate.options.logUntranslated = false resources.translate.locale = "pl_PL"
W ten oto sposób możemy już korzystać z plików lokalizacyjnych opartych o Zend_Translate (skonfigurowany zasób znajduje się w Zend_Registry::get(‘Zend_Translate’)). Niestety nie wie on z jakiej wersji językowej (pl czy en) chcemy skorzystać.
W tym celu stworzyłem plugin Zextend_Controller_Plugin_Locale, który pobiera wybrany (lub domyślny) język użytkownika i konfiguruje Zend_Translate. Dodatkowo mówimy widokowi i nawigacji, że ma się wspierać przez Zend_Translate z tym konkretnym językiem, który skonfigurowaliśmy.
class Zextend_Controller_Plugin_Locale extends Zend_Controller_Plugin_Abstract
{
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
        $locale = new Zend_Locale(Zextend_Lang::getActiveLang());
        Zend_Registry::set('Zend_Locale', $locale);
        $translate = Zend_Registry::get('Zend_Translate');
        $translate->setLocale($locale);
        $view->getHelper('translate')->setTranslator($translate);
        $view->navigation()->setTranslator($translate);
        Zend_Form::setDefaultTranslator($translate);
        Zend_Registry::set('Zend_Translate', $translate);
    }
}
Na koniec wystarczy włączyć nasz plugin w application.ini:
resources.frontController.plugins.locale = "Zextend_Controller_Plugin_Locale"
Teraz możemy już swobodnie korzystać z tłumaczeń na naszej stronie, np. w widoku wywołując:
<h2><?php echo $this->translate('Contact') ?></h2>
Dla słowa „Contact” musimy mieć oczywiście odpowiedni wpis w plikach *.po. Dla wersji PL:
msgid "Contact" msgstr "Kontakt"
Po stworzeniu tłumaczenia pamiętajmy o wygenerowaniu pliku .mo komendą: msgfmt -o pl_PL.mo pl_PL.po.
Na koniec dodam, że w danych czasach sporo rzeczy robiłem poza application.ini. Chociażby przeciążałem zasób Db, aby wprowadzić SET NAMES UTF8, czy też w index.php wpisywało się dyrektywy PHP. A obecnie?
 Kanał ATOM
 Kanał ATOM
 
	 
         
	 
	 
     
        
 
  Kiedyś już pisałem o Seo Url na blogu, co prawda temat stary jak świat, ale jakoś nigdy nie miałem koncepcji by to jakoś skrzętnie napisać. Otóż może tak trochę historii, ogólnie routing to wymyślili chłopacy od ruby on rails, napisali i tam im śmigało, następnie paru maniaków przepisało to do pythona, widać mieli w tym jakiś cel (dla mnie to masochizm pisać strony w pythonie ale co ich to ich). I nadszedł czas by ktoś przepisał koncept do PHP. Chwała im za to. A teraz ja ogarnięty szałem pisania swojego systemu, z nadszarpniętą przez kolegę Glossego dumą że pierdzę w stołek i nic nie robię postanowiłem wykorzystać dobrodziejstwo Open Sourcowych Licencji.
 Kiedyś już pisałem o Seo Url na blogu, co prawda temat stary jak świat, ale jakoś nigdy nie miałem koncepcji by to jakoś skrzętnie napisać. Otóż może tak trochę historii, ogólnie routing to wymyślili chłopacy od ruby on rails, napisali i tam im śmigało, następnie paru maniaków przepisało to do pythona, widać mieli w tym jakiś cel (dla mnie to masochizm pisać strony w pythonie ale co ich to ich). I nadszedł czas by ktoś przepisał koncept do PHP. Chwała im za to. A teraz ja ogarnięty szałem pisania swojego systemu, z nadszarpniętą przez kolegę Glossego dumą że pierdzę w stołek i nic nie robię postanowiłem wykorzystać dobrodziejstwo Open Sourcowych Licencji.