我有一个关于ZF2译者的问题,在用户点击标志或菜单链接时,在结构中的特定情况下,用于改变语言的链接。
在我的应用程序/ config / module.config.php中,我有以下代码:
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory',
),
),
我的路线是:
return array(
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Segment',
'options' => array(
'route' => '/[:lang[/:action]]',
'constraints' => array(
'lang' => '[a-zA-Z]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'index',
),
),
),
在我的Application / Module.php中,我将此代码设置为bootstrap:
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');
}
}
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
现在我的路线为http://www.xxxx.com/it/index或http://www.xxxx.com/it/company,但我无法在我的应用中为更改语言创建链接...
我如何进行?
谢谢
答案 0 :(得分:2)
您可以通过仅更改lang
参数来创建指向同一页面的链接,如下所示:
$this->url(null, array('lang' => $anotherLang), array(), true)
答案 1 :(得分:1)
只需在你的观点中执行此操作:
<a href="<?= $this->url($this->route, array('lang' => 'en'));?>"> English </a>
这将提供与当前URL
相同的{{1}}但使用不同语言(此处为英语)。
希望这有帮助。