Zend framework2 全球翻译导航

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')

我在Module.php中创建了一个onBootstrap()函数,以便在某些视图帮助程序上全局设置翻译文本域。除了一个,我想怎么做就怎么做

以下是onBootstrap()函数:

/**
 * @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()方法。我知道,这些方法只能作为视图助手使用,无论它是否工作,并且信息是否正确翻译。整个函数中唯一一个还没有转换的是导航。