Zend framework2 全球翻译导航
我在Module.php中创建了一个onBootstrap()函数,以便在某些视图帮助程序上全局设置翻译文本域。除了一个,我想怎么做就怎么做 以下是onBootstrap()函数:Zend framework2 全球翻译导航,zend-framework2,Zend Framework2,我在Module.php中创建了一个onBootstrap()函数,以便在某些视图帮助程序上全局设置翻译文本域。除了一个,我想怎么做就怎么做 以下是onBootstrap()函数: /** * @param MvcEvent $event */ public function onBootstrap(MvcEvent $event) { $sapi = php_sapi_name(); if ($sapi != 'cli' || $sapi != 'cli-server')
/**
* @param MvcEvent $event
*/
public function onBootstrap(MvcEvent $event)
{
$sapi = php_sapi_name();
if ($sapi != 'cli' || $sapi != 'cli-server') {
$default = 'en-US';
$application = $event->getApplication();
/**
* @var \Zend\Authentication\AuthenticationService $session
*/
$session = $application->getServiceManager()
->get('Zend\Authentication\AuthenticationService');
if ($session->hasIdentity()) {
$locale = $session->getIdentity()->locale;
} else {
$locale = $default;
}
$application->getServiceManager()
->get('MvcTranslator')
->setLocale($locale)
->setFallbackLocale($default);
AbstractValidator::setDefaultTranslator(
$application->getServiceManager()
->get('MvcTranslator')
);
AbstractValidator::setDefaultTranslatorTextDomain('zend');
/**
* Translate Forms
*/
$viewRenderer = $application
->getServiceManager()
->get('ViewRenderer');
$application->getEventManager()
->getSharedManager()
->attach(
'Zend\Mvc\Controller\AbstractActionController',
'dispatch',
function ($event) use
(
$viewRenderer
) {
/**
* @var MvcEvent $event
*/
$controller = $event->getTarget();
$controllerClass = get_class($controller);
$moduleNamespace = substr(
$controllerClass,
0,
strpos(
$controllerClass,
'\\'
)
);
$textDomain = strtolower($moduleNamespace);
$viewRenderer->plugin('translate')
->setTranslatorTextDomain($textDomain);
$viewRenderer->navigation('Zend\Navigation\Navigation')
->setTranslatorTextDomain('employee');
$viewRenderer->formLabel()
->setTranslatorTextDomain($textDomain);
$viewRenderer->formText()
->setTranslatorTextDomain($textDomain);
$viewRenderer->formPassword()
->setTranslatorTextDomain($textDomain);
$viewRenderer->formSubmit()
->setTranslatorTextDomain($textDomain);
},
100
);
}
}
我被卡住的部分是:
$viewRenderer->navigation('Zend\Navigation\Navigation')
->setTranslatorTextDomain($textDomain);
我没有收到任何错误,但也没有按预期进行翻译。如果我将Zend\Navigation\Navigation
更改为不存在的内容,则会出现预期的错误。这说明它正在配置中查找密钥
我也试过了,但仍然没有按预期翻译:
$viewRenderer->plugin('navigation')
->setTranslatorTextDomain($textDomain);
在我看来,当我称之为:
$this->navigation('Zend\Navigation\Navigation')
->setTranslatorTextDomain('employee');
但是,目标是从所有视图中删除该行,并在onBootstrap()函数中设置text_域
您可以看到,作为一个测试,我现在已经将$textdomain
硬编码为员工
你知道我能做什么吗?第一个大错误是你在onBootstrap方法中放了大量的代码。每个HTTP请求都会调用Module.php,它应该尽可能精简,否则会出现严重的性能问题。考虑使用工厂。永远不要离开Module.php来完成所有的工作!我理解这一点,但你的评论无助于解决我的问题$viewRenderer=$sm->get('viewRenderer');echo\Zend\Debug\Debug::dump(获取类方法($viewRenderer),null,false)代码>显示没有任何导航或formText()方法。我知道,这些方法只能作为视图助手使用,无论它是否工作,并且信息是否正确翻译。整个函数中唯一一个还没有转换的是导航。