ZF2 Navigation переводит навигационные метки и названия

Я пытаюсь найти способ перевести ярлыки и названия.
По его словам Руководство ZF2 все что мне нужно сделать:

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

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

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

Решение

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

1

Другие решения

Вы настраиваете службу переводчика и локаль в вашем 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

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


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

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);
0
По вопросам рекламы [email protected]