2015-03-25 9 views
0

Я пытаюсь найти способ перевести ярлыки и заголовки. Согласно он ZF2 Manual все, что я должен сделать это:Навигационная навигация ZF2 переводит наклейки и заголовки навигации

Навигационные помощники поддерживают перевод страниц этикеток и названий. Вы можете установить переводчик типа Zend \ I18n \ Translator в помощнике с помощью $ helper-> setTranslator ($ translator).

Так что моя навигация выглядит в конфигурационном файле

return array(
    'navigation' => array(
     'default' => array(
      array(
       'label' => 'Home', 
       'route' => 'home', 
      ), 
      array(
       'label' => 'Users', 
       'route' => 'tar-users', 
      ), 
     ), 
    ), 
); 

Это в global.php

return array(
    'service_manager' => array(
     'factories' => array(
      'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory', 
     ), 
    ), 

    //... 
); 

И в моем макете у меня есть:

<?php echo $this->navigation('navigation') 
     ->setTranslator($this->plugin('translate')->getTranslator()) 
     ->menu() 
     ->setUlClass('nav navbar-nav') 
     ->setMaxDepth(0) 
    ?> 

навигация работает, но не переводится. Я уверен, что что-то пропустил или сделал что-то не так. Я хотел бы знать, что. Я не собираюсь писать код только несколько советов.

спасибо.

+0

Я нашел то, что сейчас решает проблему, пока не найду более элегантный способ сделать это. Взгляните на ответ @Remi Tomas. [Как перевести метки форм в Zend Framework 2?] (Http://stackoverflow.com/questions/15961628/how-to-translate-form-labels-in-zend-framework-2) – FranMercaes

+0

У вас есть переводы для слов «Главная» и «Пользователи» в файле перевода? – newage

+0

poedit не распознал навигационные метки – FranMercaes

ответ

0

Вы настраиваете услугу переводчика и языковой стандарт в своем module.config.php? что-то вроде этого:

'translator' => array(
    'locale' => 'it_IT', 
    'translation_files' => array(
     array(
      'type'  => 'phpArray', 
      'filename' => __DIR__ . '/../language/Zend_Captcha.php', 
      'text_domain' => 'default' 
     ), 
     array(
      'type'  => 'phpArray', 
      'filename' => __DIR__ . '/../language/Zend_Validate.php', 
      'text_domain' => 'default' 
     ), 
    ), 
    'translation_file_patterns' => array(
     array(
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern' => '%s.mo', 
     ), 
    ), 
), 
+0

Я использую приложение скелета, перевод по умолчанию установлен в module.config.php. – FranMercaes

0

Я столкнулся загадочного обстоятельства, где я также установить все правильно, но перевод не будет выполнять ... потому что собственно языковой стандарт не был установлен на ОС , Я пытался перевести en_US в fr_CA. Это быстро фиксируется для меня вещи:

sudo locale-gen fr_CA sudo locale-gen fr_CA.UTF-8

1

Zend использует .po файлы в папке Application/language, и вы должны использовать poedit редактировать GetText переводы. Poedit просматривает. php (или .phtml файлов в этом случае) для фраз для перевода, точнее, ищет имя функции перевода (translate в этом случае). Проверьте HERE, как настроить poedit для Zend, и HERE - простое решение для перевода этикеток меню. Я только начал изучать Zend, я не уверен, что это правильный подход, но это самое простое решение, с которым я столкнулся. Вам просто нужно добавить значения меток как $translator->translate(...) в Application/config/module.config.php, переводчик конфигурации (в приложении скелета, en_US locale и gettext). После этого откройте файл .po и обновите каталог, для перевода необходимо добавить новые строки (также вы не можете и не должны добавлять новые переводы, которые автоматически не отображаются программой). Я протестировал выше, и меню переведено автоматически без вызова setTranslator(...).

+0

У меня были проблемы только с переводом наклеек. Сообщения о достоверности и т. Д. Переводятся. – FranMercaes

+0

Валидационные сообщения переводятся в zendframework \ resources \ languages, это всего лишь php-массив переводов. – Danijel

+0

Все, что я положил в $ translator-> translate («Мое слово»), получил ** переведенный ** навигационные метки нет. – FranMercaes

0

У меня была такая же проблема, и вот мое решение.(Использование gettext)

Пример:

module.config.php

array (
    'label' => _('Home'), 
    'route' => 'home' 
), 

В представлении, вы будете использовать что-то вроде этого:

$this->translate(HERE_COMES_THE_ITENS_OF_NAVIGATION) 

В моем случае я использую это:

foreach ($this->container as $page) { 
    $this->translate($page->getlabel()); 
} 

В программе PoEdit, необходимо вставить два источника ключевых слов

1 - translate 
2 - _ 

«_», чтобы отобразить ключевое слово по PoEdit и ZEND использует «перевести», чтобы заменить его на значение вы положили внутри PoEdit ,

0

Zend поставляется с переводом на навигацию, но не перед рендерингом. Этот фрагмент сделает трюк. (Zend 3)

$sm = $event->getApplication()->getServiceManager(); 
$vhm = $sm->get('ViewHelperManager'); 
$translator = $sm->get('translator'); 
$vhm->get('navigation')->setTranslator($translator);