mac*_*ete 2 php routes translate zend-framework2
我想知道是否可以在zf2中使用路由/ uris的转换工具.我想要例如en.domain.tld/article/show/1转换为例如的路线de.domain.tld/artikel/anzeigen/1.我不认为正则表达式是去这里的方式,因为它可能导致类似的东西en.domain.tld/artikel/show/1.此外,我想避免为每种语言创建路由,因为随着系统的扩展,它会变得非常混乱.
我能够让它工作!
首先,添加一个'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',你module.config.php这样的:
return array (
'router' => array (
'router_class' => 'Zend\Mvc\Router\Http\TranslatorAwareTreeRouteStack',
'routes' => array(),
)
);
Run Code Online (Sandbox Code Playgroud)
其次,您必须提供翻译(最好在您的module.php中)以及翻译文件:
class Module
{
public function onBootstrap(MvcEvent $e)
{
// Load translator
$translator = $e->getApplication()->getServiceManager()->get('translator');
$translator->setLocale('de_DE');
// setup the translation file. you can use .mo files or whatever, check the translator api
$translator->addTranslationFile('PhpArray', __DIR__.'/language/routes/de_DE.php', 'default', 'de_DE');
$app = $e->getTarget();
// Route translator
$app->getEventManager()->attach('route', array($this, 'onPreRoute'), 100);
}
public function onPreRoute($e){
$app = $e->getTarget();
$serviceManager = $app->getServiceManager();
$serviceManager->get('router')->setTranslator($serviceManager->get('translator'));
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您应该能够在路由定义中使用翻译,如下所示:
return array (
'router' => array (
'routes' => array(
'login' => array (
'type' => 'Zend\Mvc\Router\Http\Segment',
'may_terminate' => true,
'options' => array (
'route' => '/{login}',
'defaults' => Array(
'controller' => '...',
)
),
),
)
);
Run Code Online (Sandbox Code Playgroud)
创建翻译(在本例中是一个位于module/language/routes/de_DE.php中的phpArray):
<?php
return array(
'login' => 'anmelden',
);
Run Code Online (Sandbox Code Playgroud)
如果我没有忘记任何事情,你应该好好去.我得到了它在我的情况下工作,所以如果它没有上面的说明,请不要犹豫评论,我会解决问题.