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

0

Я пытаюсь найти способ перевести ярлыки и заголовки. Согласно ему 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)
    ?>

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

Спасибо.

  • 0
    Я нашел то, что решает мою проблему, пока не найду более элегантный способ сделать это. Посмотрите на ответ @Remi Tomas. Как перевести метки форм в Zend Framework 2?
  • 0
    У вас есть переводы для слов "Дом" и "Пользователи" в файле перевода?
Показать ещё 1 комментарий
Теги:
zend-framework
zend-framework2
zend-translate

5 ответов

1

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(... ).

  • 0
    У меня были проблемы только с переводом навигационных меток. Валидационные сообщения и т. Д. Переводятся.
  • 0
    Сообщения валидации переводятся в zendframework \ resources \ languages, это просто php массив переводов.
Показать ещё 1 комментарий
0

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

$sm = $event->getApplication()->getServiceManager();
$vhm = $sm->get('ViewHelperManager');
$translator = $sm->get('translator');
$vhm->get('navigation')->setTranslator($translator);
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 использует "translate", чтобы заменить его значением, которое вы ввели в POEDIT.

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню