как добавить несколько типов переводов в Zend - PullRequest
1 голос
/ 21 февраля 2011

Я использовал этот код попытаться добавить массив перевода из / 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' с сообщение 'Ошибка, включающая массив или файл «1» в blabla.php по линии 61

Может кто-нибудь сказать мне, как добавить эти файлы перевода из моей начальной загрузки, не получая эти ошибки?

1 Ответ

2 голосов
/ 21 февраля 2011

Я не уверен на 100%, но я думаю, что вы не можете смешивать типы файлов перевода.Причина в том, что $translate->addTranslation() на самом деле вызовет метод addTranslation() на Zend_Translate_Adapter_Array, который, в свою очередь, вызовет метод _loadTranslationData также на 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 Я не проверял это, поэтому я не могу дать ему понять, что это работает, но именно так я бы хотя бы попытался это сделать.

...