zf2交易程序打印未翻译文本的消息ID


zf2 transalator print msgid not translated text

我创建了文件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是文件的消息ID

打印密钥而不是翻译文本

这是我的文件

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."

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',
        ),
    ),
),

所有未经测试的