сделать проект многоязычным с помощью Zend/Translator

Добрый вечер,

Я хочу добавить 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',
            ),
        ),
    ),

...

В Module.php в Bootstrap я установил 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

Кажется, я что-то забыл..

Кто-нибудь может мне помочь?

Спасибо.


person Peach    schedule 08.03.2014    source источник


Ответы (2)


В Zend i18n есть странная особенность: Zend\I18n\Translator\Translator несовместим с другими компонентами. Транслятор Mvc связывает транслятор с другими частями. Zend\Mvc\I18n\Translator расширяет "обычный" транслятор, а затем реализует интерфейс транслятора, запрошенный компонентом Zend\Validator.

Итак, создайте транслятор MVC с помощью фабрики трансляторов MVC. Замените Zend\I18n\Translator\TranslatorServiceFactory на Zend\Mvc\Service\TranslatorServiceFactory.

person Jurian Sluiman    schedule 09.03.2014

это простое руководство
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 я задаю только путь к этому файлу. (помощь в улучшении управления) и в свойствах каталога-> источники ключевые слова должны быть переведены (и, конечно, лучше). в любом месте, где я хочу показать сообщение. Я пишу

echo $this->translate('key');
person Amin Arab    schedule 13.03.2014