2016-07-10 12 views
5

Sto provando a valutare se è già il momento giusto per iniziare a passare a ZF3 (o continuare a sviluppare la mia applicazione con ZF2). Pertanto, ho installato l'applicazione mvc-skeleton e ho seguito il tutorial MVC (here) che ha funzionato perfettamente fino a quando non sono arrivato alla parte di internazionalizzazione.ZF3 zend-mvc-skeleton internazionalizzazione non funzionante

Ho installato i componenti (ovvero il componente zend-i18n e zend-mvc-i18n), creato i file di traduzione (cioè en_US.mo e en_US.po) e li ho copiati nella mia cartella module/Application/language/ e aggiunto la configurazione nell'applicazione file di configurazione.

// in a module's module.config.php: 
'translator' => [ 
    'locale' => 'en_US', 
    'translation_file_patterns' => [ 
     [ 
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern' => '%s.mo', 
     ], 
    ], 
], 

E, naturalmente, aggiunto il testo da tradurre nel file layout.phtml

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

Tuttavia, per qualche ragione non funziona

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} 

La mia domanda è semplice. Ci sei riuscito o hai qualche idea di cosa c'è che non va? Qualsiasi aiuto sarà apprezzato. Grazie molto.

+0

Sai come in config traduttore/I18n sul controller o tramite plug-controllore? – rafaelphp

risposta

6

Sembra che non riesca a trovare l'helper della vista di traduzione. Prova ad aggiungere questo nel file di configurazione:

'view_helpers' => [ 
    'invokables' => [ 
     'translate' => \Zend\I18n\View\Helper\Translate::class 
    ] 
] 

Ho anche scoperto che mi serviva per registrare il servizio:

'service_manager' => [ 
    'factories' => [ 
     \Zend\I18n\Translator\TranslatorInterface::class => \Zend\I18n\Translator\TranslatorServiceFactory::class, 
    ] 
] 
+0

Grande, l'array view_helpers ha fatto il lavoro. –

+0

Come fare lo stesso per lavorare il traduttore sul controller? – rafaelphp

+0

Prima iniettare l'helper della vista di traduzione nel controller usando una factory (codice: '$ serviceManager-> get ('ViewHelperManager') -> get ('translate')'). Quindi nel controller utilizzare il metodo '__invoke' del traduttore, ad es.' $ TranslateString = $ translateHelper ("Here is a string") '. – avy

0

Mi lavorare con questa configurazione:

'translator' => [ 
    'locale' => 'cs_CZ', 
    'translation_file_patterns' => [ 
     [ 
      'type' => 'gettext', 
      'base_dir' => APPLICATION_MODULE_ROOT . '/language', 
      'pattern' => '%s.mo', 
     ], 
    ], 
], 

Con quali moduli sono stati installati ZF3? zend-servicemanager hai installato?

+0

I moduli installati sono: 'Zend \ Mvc \ I18n', 'Zend \ Log', 'Zend \ Form', 'Zend \ Db', 'Zend \ Router', 'Zend \ Validator', 'Applicazione' –

9

ho avuto la soluzione "plain vanilla" dal samsonasik here. La soluzione è quella di richiedere:

$ composer require zendframework/zend-mvc-i18n 

quindi registrarlo come modulo:

'modules' => [ 
    'Zend\I18n', 
    'Zend\Mvc\I18n', 
    // ... 
], 
+2

Questa è la risposta corretta. Inoltre, se si sta utilizzando zend-component-installer, dovrebbe * chiedere * se si desidera installare questi moduli, e quindi farlo per voi. Se non si sta ancora utilizzando zend-component-installer, aggiungerlo all'applicazione tramite 'compositore richiede zendframework/zend-component-installer', poiché questo automatizza. – weierophinney