1

我使用此代码尝试从 /resources/languages 添加翻译数组并从 /application/languages/nl.mo (gettext) 添加翻译

$translate = new Zend_Translate(
        array(

            'adapter' => 'array',
            'content' => APPLICATION_PATH . '/resources/languages',
            'locale'  => 'nl',
            'scan' => Zend_Translate::LOCALE_DIRECTORY
        )
    );


    $translate->addTranslation(
        array(
            'adapter' => 'gettext',
            'content' => APPLICATION_PATH.DIRECTORY_SEPARATOR.'languages'.DIRECTORY_SEPARATOR.'nl_NL.mo',
            'locale'  => 'nl'
        )
    );

当我尝试添加单个翻译时,一切正常(在两种情况下)当我添加第二个翻译时,我收到此错误:

致命错误:在第 61 行的 blabla.php 中,未捕获的异常“Zend_Translate_Exception”带有消息“错误包括数组或文件 '1'”

有人可以告诉我如何从我的引导程序中添加这些翻译文件,而不会出现这些错误吗?

4

1 回答 1

2

我不是 100% 肯定,但我认为你不能混合翻译文件的类型。原因是它$translate->addTranslation()实际上会调用一个方法addTranslation()on Zend_Translate_Adapter_Array,而后者又会调用一个方法_loadTranslationDataon Zend_Translate_Adapter_Array。因此Zend_Translate_Adapter_Array尝试将文件nl_NL.mo作为数组读取,这会导致错误,包括数组或文件 错误。

但是,如果翻译文件“nl”是来自 zend 资源的文件,并且您只想将其用于翻译 zend_form 消息,我认为您可以为此定义一个单独的翻译器,如下所示:

$translate = new Zend_Translate(
    array(

        'adapter' => 'array',
        'content' => APPLICATION_PATH . '/resources/languages',
        'locale'  => 'nl',
        'scan' => Zend_Translate::LOCALE_DIRECTORY
    )
);

 // use this one in Zend_Form 
 Zend_Form::setDefaultTranslator($translate);

而 'nl_NL' 您可以将其余部分设为默认值:

$translate = new Zend_Translate(
                array(
                    'adapter' => 'gettext',
                    'content' => APPLICATION_PATH . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'nl_NL.mo',
                    'locale' => 'nl'
                )
);       

// Save it for the rest of application to use
Zend_Registry::set('Zend_Translate', $translate);

PS我没有对此进行测试,因此我不能授予它工作,但这是我至少会尝试这样做的方式。

于 2011-02-21T01:57:58.903 回答