Я пытаюсь найти способ перевести ярлыки и заголовки. Согласно ему ZF2 Manual, все, что я должен сделать:
Помощники навигации поддерживают перевод ярлыков страниц и названий. Вы можете установить переводчик типа 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)
?>
Навигация работает, но не переводится. Я уверен, что что-то пропустил или сделал что-то не так. Я хотел бы знать, что. Я не собираюсь писать код только несколько советов.
Спасибо.
Zend использует файлы .po
папке Application/language
, и вам нужно использовать poedit для редактирования трансляции gettext. Poedit просматривает. php
(или .phtml
файлы в этом случае) для переводов фраз, точнее, ищет имя функции translate
(translate
в этом случае). Проверьте ЗДЕСЬ, как настроить poedit для Zend, а ЗДЕСЬ - простое решение для перевода ярлыков меню. Я только начал изучать Zend, я не уверен, что это правильный подход, но это самое простое решение, с которым я столкнулся. Вам просто нужно добавить значения меток в качестве $translator->translate(... )
в Application/config/module.config.php
, транслятор configure (в скелетном приложении, en_US
locale и gettext
type). После этого открыть файл .po
и обновить каталог, новые строки должны быть добавлены для перевода (также вы не можете и не должны добавлять новые переводы, которые автоматически не отображаются программой). Я проверил выше, и меню автоматически переводится без setTranslator(... )
.
Zend поставляется с переводом навигация, но не до рендеринга. Этот фрагмент сделает трюк. (Zend 3)
$sm = $event->getApplication()->getServiceManager();
$vhm = $sm->get('ViewHelperManager');
$translator = $sm->get('translator');
$vhm->get('navigation')->setTranslator($translator);
У меня была та же проблема, и вот мое решение. (Использование 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 использует "translate", чтобы заменить его значением, которое вы ввели в POEDIT.
вы настраиваете службу переводчика и локаль в своем модуле.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',
),
),
),
Я столкнулся с загадочным обстоятельством, когда я правильно настроил все, но перевод не будет выполняться... потому что соответствующий язык не был установлен в ОС. Я пытался перевести en_US в fr_CA. Это быстро фиксировало для меня вещи:
sudo locale-gen fr_CA sudo locale-gen fr_CA.UTF-8