2016-07-10 13 views
5

Tôi đang cố gắng đánh giá xem đã đến lúc bắt đầu chuyển sang ZF3 chưa (hoặc tiếp tục phát triển ứng dụng của tôi với ZF2). Vì vậy, tôi đã cài đặt ứng dụng mvc-skeleton và đi qua hướng dẫn MVC (here) hoạt động hoàn hảo cho đến khi tôi đến phần quốc tế hóa.ZF3 zend-mvc-skeleton quốc tế hóa không hoạt động

Tôi đã cài đặt các thành phần (tức là thành phần zend-i18n và zend-mvc-i18n), đã tạo các tệp dịch (ví dụ: en_US.mo và en_US.po) và sao chép chúng vào thư mục module/Application/language/ của chúng tôi và thêm cấu hình trong ứng dụng tập tin cấu hình.

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

Và tất nhiên, bổ sung các văn bản để dịch trong file layout.phtml

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

Tuy nhiên, vì một lý do nó không làm việc

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} 

Câu hỏi của tôi là đơn giản. Bạn đã thành công trong việc này hay bạn có bất kỳ ý tưởng gì về nó không? Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn nhiều.

+0

Bạn có biết làm thế nào để cấu hình dịch/i18n trên bộ điều khiển hoặc thông qua plugin của bộ điều khiển? – rafaelphp

Trả lời

6

Dường như không thể tìm thấy trình trợ giúp chế độ xem bản dịch. Thử thêm này trong tập tin cấu hình của bạn:

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

Tôi cũng thấy mình cần phải đăng ký dịch vụ:

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

Tuyệt vời, mảng view_helpers đã thực hiện công việc. –

+0

Làm cách nào để thực hiện thao tác dịch trên bộ điều khiển? – rafaelphp

+0

Đầu tiên hãy đưa trình trợ giúp xem bản dịch vào bộ điều khiển bằng cách sử dụng một nhà máy (mã: '$ serviceManager-> get ('ViewHelperManager') -> get ('translate')'). Sau đó, trong bộ điều khiển, hãy sử dụng phương thức '__invoke' của dịch giả, tức là' $ translateString = $ translateHelper ("Đây là một chuỗi") '. – avy

0

Nó làm việc cho tôi với cấu hình này:

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

Với những mô-đun bạn đã cài đặt zf3? zend-servicemanager bạn đã cài đặt chưa?

+0

Các module được cài đặt là: 'Zend \ MVC \ i18n', 'Zend \ Log', 'Zend \ Mẫu', 'Zend \ Db', 'Zend \ Router', 'Zend \ Validator', 'Ứng dụng' –

9

tôi có những "vani đồng bằng" giải pháp từ samsonasik here. Giải pháp là để yêu cầu:

$ composer require zendframework/zend-mvc-i18n 

sau đó đăng ký như mô-đun:

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

Đây là câu trả lời đúng. Ngoài ra, nếu bạn đang sử dụng zend-component-installer, nó sẽ * hỏi * bạn nếu bạn muốn cài đặt các mô-đun này, và sau đó làm điều đó cho bạn. Nếu bạn chưa sử dụng zend-component-installer, hãy thêm nó vào ứng dụng của bạn thông qua 'composer yêu cầu zendframework/zend-component-installer', vì nó tự động hóa nó. – weierophinney

Các vấn đề liên quan