Search code examples
zend-frameworkzend-formzend-translate

ZEND tralslations for addMultiOption text in Form for poEdit


I dont have an idea why translations are not working in with Zend_Form. I would like to be able translate options for selects. For now i have something like this:

my form class:

(...)

$this->translate = Zend_Registry::get('translate');
Zend_Form::setDefaultTranslator( Zend_Registry::get('translate') );

(...)
     $select = new Zend_Form_Element_Select('select');
     // $select->addMultiOption('0', $this->translate('Aktywny'));
     $select->addMultiOption('0', $this->translate->_('Aktywny'));
     $select->addMultiOption('1', 'Nieaktywny');

in my bootstrap file i have something like this:

    protected function _initTranslate()
{
    Zend_Loader::loadClass('Zend_Translate');
    Zend_Loader::loadClass('Zend_Registry');

    $translate = new Zend_Translate('gettext', APPLICATION_PATH.'/languages',
                                    'browser',
                                    array('scan' => Zend_Translate::LOCALE_FILENAME));

            //changing language and setting it to session if changed                
    $session = new Zend_Session_Namespace('jezyk');
    if(isset($session->language)) {
        $translate->setLocale($session->language);
    } else
        $translate->setLocale('pl');


    $registry = Zend_Registry::getInstance();
    $registry->set('Zend_Translate', $translate);   

}

and it works fine for controllers, phtml files and plugins where i call it by

$this->translate('string to translate');

and in plugins

$this->view->translate('string to translate');

but those methods won't work in form. It throws exception:

Warning: Exception caught by form: No entry is registered for key 'translate' Stack Trace: #0


Solution

  • to make it working as i wrote in comment just have to change line:

    $this->translate = Zend_Registry::get('translate');
    

    for

    $this->translate = Zend_Registry::get('Zend_Translate');
    

    cause i didn't saw that i'm getting wrong translate from registry. It should be Zend_Translate like in Bootstrap file, not translate as i did.

    And this is solution for my problems with translate and now i can make translations in form files :)