ZF3 zend-mvc-skeleton国际化不起作用

l_r*_*l_r 5 zend-framework-mvc zend-framework3 zf3

我正在尝试评估是否已经是开始转向ZF3的合适时机(或继续使用ZF2开发我的应用程序).因此,我安装了mvc-skeleton应用程序,并浏览了MVC教程(这里),它完美地运行,直到我进入国际化部分.

我安装了组件(即zend-i18n和zend-mvc-i18n组件),创建了翻译文件(即en_US.mo和en_US.po)并将它们复制到我的module/Application/language/文件夹中,并在应用程序配置文件中添加了配置.

// in a module's module.config.php:
'translator' => [
    'locale' => 'en_US',
    'translation_file_patterns' => [
        [
            'type'     => 'gettext',
            'base_dir' => __DIR__ . '/../language',
            'pattern'  => '%s.mo',
        ],
    ],
],
Run Code Online (Sandbox Code Playgroud)

当然,在layout.phtml文件中添加要翻译的文本

<p>&copy; 2016 by Examples Ltd. <?= $this->translate('All rights reserved') ?></p>
Run Code Online (Sandbox Code Playgroud)

但是,出于某种原因,它无法正常工作

Zend\ServiceManager\Exception\ServiceNotFoundException    

File:
my_install_path/zend-mvc-skeleton-application/vendor/zendframework/zend-servicemanager/src/AbstractPluginManager.php:133

Message:
A plugin by the name "translate" was not found in the plugin manager Zend\View\HelperPluginManager

Stack trace:
#0 /my-own-install-path/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php(373): Zend\ServiceManager\AbstractPluginManager->get('translate', NULL)
#1 /my-own-install-path/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php(391): Zend\View\Renderer\PhpRenderer->plugin('translate')
#2 /my-own-install-path/module/Application/view/application/index/index.phtml(1): Zend\View\Renderer\PhpRenderer->__call('translate', Array)
#3 /my-own-install-path/module/Application/view/application/index/index.phtml(1): Zend\View\Renderer\PhpRenderer->translate('Dr Job')
#4 /my-own-install-path/vendor/zendframework/zend-view/src/Renderer/PhpRenderer.php(502): include('/Applications/M...')
#5 /my-own-install-path/vendor/zendframework/zend-view/src/View.php(207): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
#6 /my-own-install-path/vendor/zendframework/zend-view/src/View.php(236): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#7 /my-own-install-path/vendor/zendframework/zend-view/src/View.php(200): Zend\View\View->renderChildren(Object(Zend\View\Model\ViewModel))
#8 /my-own-install-path/vendor/zendframework/zend-mvc/src/View/Http/DefaultRenderingStrategy.php(105): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
#9 /my-own-install-path/vendor/zendframework/zend-eventmanager/src/EventManager.php(271): Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent))
#10 /my-own-install-path/vendor/zendframework/zend-eventmanager/src/EventManager.php(143): Zend\EventManager\EventManager->triggerListeners(Object(Zend\Mvc\MvcEvent))
#11 /my-own-install-path/vendor/zendframework/zend-mvc/src/Application.php(369): Zend\EventManager\EventManager->triggerEvent(Object(Zend\Mvc\MvcEvent))
#12 /my-own-install-path/vendor/zendframework/zend-mvc/src/Application.php(348): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent))
#13 /my-own-install-path/public/index.php(43): Zend\Mvc\Application->run()
#14 {main}
Run Code Online (Sandbox Code Playgroud)

我的问题很简单.你在这方面取得了成功,或者你对它有什么问题有所了解吗?任何帮助将不胜感激.非常感谢.

l_r*_*l_r 12

我在这里获得了samsonasik的"普通香草"解决方案.解决方案是要求:

$ composer require zendframework/zend-mvc-i18n
Run Code Online (Sandbox Code Playgroud)

然后注册为模块:

'modules' => [
     'Zend\I18n',
     'Zend\Mvc\I18n',
     // ...
],
Run Code Online (Sandbox Code Playgroud)

  • 这是正确的答案.此外,如果您使用的是zend-component-installer,它应该*询问您是否要安装这些模块,然后为您执行此操作.如果您还没有使用zend-component-installer,请通过`composer require zendframework/zend-component-installer`将其添加到您的应用程序中,因为它会自动执行此操作. (2认同)

avy*_*avy 7

它看起来无法找到翻译视图助手.尝试在配置文件中添加:

'view_helpers' => [
    'invokables' => [
        'translate' => \Zend\I18n\View\Helper\Translate::class
    ]
]
Run Code Online (Sandbox Code Playgroud)

我还发现我需要注册该服务:

'service_manager' => [
    'factories' => [
        \Zend\I18n\Translator\TranslatorInterface::class => \Zend\I18n\Translator\TranslatorServiceFactory::class,
    ]
]
Run Code Online (Sandbox Code Playgroud)