Thursday, 15 August 2013

php - MultiLingual Site in Zend Framework 2 - set value of setLocale() from URL param -



php - MultiLingual Site in Zend Framework 2 - set value of setLocale() from URL param -

below have done far -

in application module - module.config.php -

'service_manager' => array( [....], 'aliases' => array( 'translator' => 'mvctranslator', ), ), 'translator' => array( 'locale' => 'en_us', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __dir__ . '/../language', 'pattern' => '%s.mo', ), ), ),

in album module - module.config.php -

'router' => array( 'routes' => array( 'album' => array( 'type' => 'segment', 'options' => array( 'route' => '[/:lang]/album[/:action][/:id]', 'constraints' => array( 'lang' => '[a-za-z]*', 'action' => '[a-za-z][a-za-z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( 'controller' => 'album\controller\album', 'action' => 'index', ), ), ), ), ),

in album module - module.php -

public function onbootstrap(mvcevent $e) { $sm = $e->getapplication()->getservicemanager(); $router = $sm->get('router'); $request = $sm->get('request'); $matchedroute = $router->match($request); $params = $matchedroute->getparams(); if(isset($params['lang']) && $params['lang'] !== '') { $translator = $e->getapplication()->getservicemanager()->get('translator'); //or //$translator = $e->getapplication()->getservicemanager()->get('mvctranslator'); if($params['lang'] == 'en') $translator->setlocale('en_us'); elseif($params['lang'] == 'fr') $translator->setlocale('fr_fr'); else $translator->setlocale('en_us'); } }

in view -

echo $this->translate('home');

note: url - http://zf2-tutorial.localhost/fr/album, works fine. translation successful.

query -

$translator->setlocale('en'); seems working zf1 not zf2.

i need know whether there way straight set url param value $translator->setlocale($params['lang']); rather long if-else or switch statements.

some sites might in 20 or more languages.

thanks in advance.

simple answer: utilize slmlocale. wrote module implement locale detection dry , different utilize cases.

don't seek fit localization routes. allows have translatable routes observe locale before routing. also, helps enormously alter locale different uris.

a error made in process grab route match event during bootstrap. however, bootstrap occurs before routing, can't route match parameters @ stage.

tl;dr: checkout slmlocale, should help problems.

php zend-framework2 translation multilingual

No comments:

Post a Comment