Переводчик zf2 print msgid непереведенный текст

Я создал файл it_IT.mo и it_IT.po, которые поместил в папку

module/application/language/mydomain/ 

в файле module.php я ввел

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
    $eventManager->attach('dispatch.error', array($this,'onDispatchError'), 100);

    $translator = $e->getApplication()->getServiceManager()->get('translator');
    $translator->addTranslationFile(
        'phpArray',
        'vendor/zendframework/zendframework/resources/languages/it/Zend_Validate.php',
        'default',
        'it_IT'
    );
    $translator->addTranslationFilePattern('Gettext',"module/Application/language/mydomain/","mydomain");
    AbstractValidator::setDefaultTranslator($translator);
}

по моему виду

<?php echo $this->translate("operation_allowed_false","ha","it_IT"); die();?>

operation_allowed_false — это msgid файла

печатать ключ, а не переведенный текст

это мой файл

msgid ""
msgstr ""
"Project-Id-Version: ha\n"
"POT-Creation-Date: 2014-09-17 13:09+0100\n"
"PO-Revision-Date: 2014-09-17 13:14+0100\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: it_IT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.6.9\n"
"X-Poedit-Basepath: C:\\Users\\DEVELOPMENT\\xamp\\htdocs\\ha\\doc\\phpstring"
"\\contenuti\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-SearchPath-0: C:\\Users\\DEVELOPMENT\\xamp\\htdocs\\ha\\doc"
"\\phpstring\\contenuti\n"

#: C:\Users\DEVELOPMENT\xamp\htdocs\ha\doc\phpstring\contenuti/base.php:9
msgid "operation_allowed_false"
msgstr "Operazione non consentita."

person ciro    schedule 17.09.2014    source источник


Ответы (1)


В Module.php вы регистрируете gettext translationFilePattern с неправильным шаблоном. Строка шаблона должна содержать "%s", который заменяется строкой локали.

Пример:

$translator->addTranslationFilePattern('gettext',"module/Application/language/mydomain","%s.mo");

Поэтому, если ваш язык — it_IT, переводчик загрузит файл module/Application/language/mydomain/it_IT.mo.


В вашем представлении вы хотите перевести с домена ha (второй параметр):

<?php echo $this->translate("operation_allowed_false","ha","it_IT"); die();?>

Но вы не зарегистрировали свой файл translationFilePattern в текстовом домене. Установите для этого параметра значение null, чтобы использовать домен по умолчанию:

<?php echo $this->translate("operation_allowed_false" null,"it_IT"); die();?>

Я бы также рекомендовал переместить конфигурацию транслятора в ваш module.config.php:

'translator' => array(
    'locale' => 'it_IT',
    'translation_files' => array(
        array(
            'type' => 'phpArray',
            'filename' => '/vendor/zendframework/zendframework/resources/languages/it/Zend_Validate.php',
            'locale' => 'it_IT',
        ),
    ),
    'translation_file_patterns' => array(
        array(
            'type' => 'gettext',
            'base_dir' => __DIR__ . '/../language/mydomain',
            'pattern' => '%s.mo',
        ),
    ),
),

Все непроверенное

person BreyndotEchse    schedule 17.09.2014
comment
Спасибо, это работает! Теперь я могу перевести свой текст. но когда я установил его на Module.php, сообщения валидаторов были переведены. - person ciro; 18.09.2014
comment
может быть, я использую «AbstractValidator::setDefaultTranslator($translator)» - person ciro; 18.09.2014
comment
Извините, ключ конфигурации был неправильным. Это должно быть translation_files, а не translation_file (отсутствует буква "s" в конце). Тогда он должен работать без установки статического переводчика по умолчанию. - person BreyndotEchse; 19.09.2014