0

我不知道为什么翻译不能与 Zend_Form 一起使用。我希望能够翻译选择的选项。现在我有这样的事情:

我的表单类:

(...)

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

在我的引导文件中,我有这样的东西:

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

}

它适用于我调用它的控制器、phtml 文件和插件

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

在插件中

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

但这些方法在形式上是行不通的。它抛出异常:

警告:表单捕获的异常:没有为键“翻译”注册条目堆栈跟踪:#0

4

1 回答 1

0

要让它像我在评论中写的那样工作,只需要换行:

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

为了

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

因为我没有看到我从注册表翻译错误。它应该像 Bootstrap 文件中那样是 Zend_Translate,而不是像我那样翻译。

这是我翻译问题的解决方案,现在我可以在表单文件中进行翻译:)

于 2011-11-23T11:55:38.593 回答