使用Zend / Translator使项目多语言化

时间:2014-03-08 18:18:27

标签: zend-framework2 zend-translate

晚上好,

我想将zend / translate添加到我的项目中,以多种语言显示我的网站。但是没有任何作用。以下是我已经完成的步骤:

在module.config.php中,我查看了翻译器是否已初始化:

...

'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',

...

'translator' => array(
        'translation_file_patterns' => array(
            array(
                'type'     => 'gettext',
                'base_dir' => __DIR__ . '/../language',
                'pattern'  => '%s.mo',
            ),
        ),
    ),

...

在Bootstrap的Module.php中,我设置了DefaultTranslator:

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);

    \Locale::setDefault('de_DE');
    \Zend\Validator\AbstractValidator::setDefaultTranslator(
            $e->getApplication()
                    ->getServiceManager()
                    ->get('translator')
    );
}

但是当我重新加载我的网站时,会出现这样的错误:

 Catchable fatal error: Argument 1 passed to Zend\Validator\AbstractValidator::setDefaultTranslator() must be an instance of Zend\Validator\Translator\TranslatorInterface, instance of Zend\I18n\Translator\Translator given, called in C:\xampp\htdocs\pimp\module\Application\Module.php on line 28 and defined in C:\xampp\htdocs\pimp\vendor\zendframework\zendframework\library\Zend\Validator\AbstractValidator.php on line 472

我认为有些事情我已经忘记了......

有人可以帮助我吗?

感谢。

2 个答案:

答案 0 :(得分:1)

Zend i18n中有一个奇怪的部分,Zend \ I18n \ Translator \ Translator与其他组件不兼容。 Mvc Translator将译者绑定到其他部分。 Zend\Mvc\I18n\Translator扩展了“普通”转换器,然后它实现了Zend \ Validator组件请求的转换器接口。

因此,使用MVC翻译工厂创建Mvc Translator。将Zend\I18n\Translator\TranslatorServiceFactory替换为Zend\Mvc\Service\TranslatorServiceFactory

答案 1 :(得分:0)

这是简单的教程
http://samminds.com/2012/09/zend-framework-2-translate-i18n-locale/
http://www.poedit.net/
但我有

   ,'translator' => array(
        'locale' => 'en_US',
        'translation_file_patterns' => array(
            array(
                'type' => 'translate',
                'base_dir' => __DIR__ . '/../language',
                'pattern' => '%s.mo',
            ),
        ),
    ),

在module.config.php和一个php文件中,所有键都存在于其中,例如

<?php 

    /*
     * General keys
     */
    $this->translate('projectname');
    $this->translate('login');
    $this->translate('logout');
    $this->translate('pages');
    $this->translate('contents');
    $this->translate('ourposition');            
    $this->translate('search_pleace');  
    $this->translate('contactform');
    $this->translate('pleaseuploadresume');

?>

在poedit中我只设置了这个文件的路径。 (有助于更好的管理)和目录属性 - &gt;来源关键词翻译应该存在(当然更好)。任何我想要显示消息的地方。我写了

echo $this->translate('key');