2016-07-10 18 views
5

Ich versuche, es zu beurteilen, ob bereits der richtige Zeitpunkt, um ZF3 bewegen zu starten (oder hält meine Anwendung mit ZF2 Entwicklung). Deshalb installierte ich die MVC-Skelett-Anwendung und ging durch die MVC-Tutorial (here), die perfekt gearbeitet, bis ich zur Internationalisierung Teil bekam.ZF3 zend-mvc-Skelett Internationalisierung arbeitet nicht

Ich installierte die Komponenten (zend-i18n und zend-mvc-i18n Komponente), erstellte die Übersetzungsdateien (zB en_US.mo und en_US.po) und kopierte sie in meinen Ordner und fügte die Konfiguration in der Anwendung hinzu Konfigurationsdatei.

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

Und natürlich hinzugefügt, um den Text in der Datei layout.phtml arbeitet es nicht

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} 

Meine Frage ist einfach

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

jedoch aus irgendeinem Grund zu übersetzen. Ist Ihnen das gelungen oder haben Sie eine Ahnung, was damit nicht stimmt? Jede Hilfe wird geschätzt. Danke vielmals.

+0

Wissen Sie, wie Übersetzer/I18n auf Controller Config oder über den Controller-Plugin? – rafaelphp

Antwort

6

Es sieht aus wie es nicht die Ansicht Helfer übersetzen finden. Versuchen Sie, diese in Ihrer Konfigurationsdatei:

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

Ich fand auch, um den Dienst zu registrieren ich brauchte:

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

Großartig, das View_Helpers-Array hat die Aufgabe erfüllt. –

+0

Wie mache ich das gleiche, um Übersetzer auf dem Controller zu arbeiten? – rafaelphp

+0

zuerst den View Helfer in die Steuerung mit einer Fabrik (: '$ serviceManager-> get ('ViewHelperManager') -> get ('übersetzen')' Code) übersetzen injizieren. Dann in der Steuerung der '__invoke' Methode des Übersetzers verwenden d' $ translatedString = $ translateHelper ("Hier ist ein String") '. – avy

0

Es funktioniert mich mit dieser Konfiguration:

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

Mit welchen Modulen Sie ZF3 installiert haben? zend-servicemanager hast du installiert?

+0

Die Module installiert sind: 'Zend \ Mvc \ I18n', 'Zend \ Log' 'Zend \ Form', 'Zend \ Db', 'Zend \ Router' 'Zend \ Validator', 'Anwendung' –

9

Ich habe die "Plain Vanilla" Lösung von samsonasik here. Die Lösung ist erforderlich:

$ composer require zendframework/zend-mvc-i18n 

dann als Modul registrieren:

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

Dies ist die richtige Antwort. Wenn Sie zend-component-installer verwenden, sollte Sie * fragen * Sie, ob Sie diese Module installieren möchten, und dann tun Sie es für Sie. Wenn Sie den zend-component-installer noch nicht benutzen, fügen Sie ihn über 'composer require zendframework/zend-component-installer' in Ihre Anwendung ein, da dies automatisiert wird. – weierophinney