【问题标题】:zf2 transalator print msgid not translated textzf2 转换器打印 msgid 未翻译文本
【发布时间】:2014-11-11 10:18:07
【问题描述】:

我创建了文件 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."

【问题讨论】:

    标签: php zend-framework2 translate po


    【解决方案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',
            ),
        ),
    ),
    

    一切未经测试

    【讨论】:

    • 感谢它有效!现在我可以翻译我的文字了。但是当我在 Module.php 上设置它时,验证器的消息被翻译了。
    • 也许我使用'AbstractValidator::setDefaultTranslator($translator)'
    • 抱歉,配置键错误。它必须是translation_files,而不是translation_file(末尾缺少's')。那么它应该可以在不设置静态默认翻译器的情况下工作。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多