如何在zend中添加多种类型的翻译

时间:2011-02-20 21:11:18

标签: php zend-framework zend-translate

我使用了这段代码 尝试从/ 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'
        )
    );

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

  

致命错误:未捕获的异常   'Zend_Translate_Exception'用   message'错误包括数组或文件   '1''   blabla.php   在第61行

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

1 个答案:

答案 0 :(得分:2)

我不是百分百肯定,但我认为你不能混合翻译文件的类型。原因是$translate->addTranslation()实际上会在addTranslation()上调用方法Zend_Translate_Adapter_Array,而_loadTranslationData也会在Zend_Translate_Adapter_Array上调用方法Zend_Translate_Adapter_Array。因此nl_NL.mo尝试将文件$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'是来自zend资源的文件,并且您只想将其用于翻译zend_form消息,我认为您可以为此定义一个单独的翻译器,如下所示:

$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);

'nl_NL'你可以将其余部分作为默认值:

{{1}}

P.S。 我没有对此进行过测试,因此我无法承认它有效,但这就是我至少尝试这样做的方法。