我有一个Zend_Form_Element_Select
对象,还有大约3k个选项。当客户要求我进一步研究优化可能性时,我做了一些调试跟踪,并注意到,Zend_Form_Element_Multi->_translateValue
的调用次数超过3k,而Zend_Form_Element_Multi->_translateOption
的调用少了一点。我找到了设置$elem->setDisableTranslator(true)
的选项,它负责这些翻译,我没有必要。但现在的问题是,错误消息不再被翻译。
我想知道的是,如果有办法不翻译价值和选项,但翻译验证者消息?
我试过了:
foreach($operators->getValidators() as $val){
$val->setDisableTranslator(false);
}
但无济于事。
答案 0 :(得分:2)
我在元素类中没有看到任何选项,因此简单的解决方案是使用您自己的类扩展Zend_Form_Element_Select
类。然后,您可以按如下方式覆盖_translateOptions
方法
class My_Form_Element_Select extends Zend_Form_Element_Select {
protected function _translateOption($option,$value) {
// or add more logic here
return false;
}
}
此外,您可以为此方案设置一些其他逻辑和选项,即打开/关闭选项的翻译。
如果您想要同时取消此通话,则必须覆盖正在呼叫getMultiOption()
的{{1}}或getMultiOptions()
。