假设这种情况
$form->addElement('select', 'companies', array(
'disableTranslator' => true,
'label' => Zend_Registry::get('Zend_Translate')->_('companies'),
'filters' => array('Int'),
'required' => true,
'multiOptions' => array(1 => 'Company 1', 2 => 'Company 2')
));
if($_POST && $form->isValid($_POST)) {
$form->save();
}
$form->render();
此选择用于从给定的选项列表中选择公司
表单具有默认翻译器集,其中包含1个翻译短语"my_translated_text" => "here comes the translation"
。
根据用户输入的数据填充选择框中的选项,这意味着用户可以添加名称为my_translated_text
的公司,而该公司又应在选择框中显示为“my_translated_text”的新选项。
如果没有disableTranslator => true
选项,my_translated_text
公司将被翻译为here comes the translation
,从而显示为翻译文本 - >我们需要禁用翻译。
但如果有disableTranslator => true
错误消息(例如“值是必需的”)未翻译。
理想情况下,我不想翻译这些值,但希望翻译有关选择框的所有其他内容 你是如何处理这种情况的?你有过类似的问题吗?
谢谢
答案 0 :(得分:1)
我无法理解这个问题,但如果我理解正确,您不希望翻译选项值。从Zend_Form
无法执行此操作。就像你说的那样,你只能为整个元素启用/禁用翻译器。
您最好的选择是创建自定义表单元素或装饰器。我不完全确定翻译的位置,但我认为这些选项已经在Zend_Form_Multi的_translateValue()
方法中进行了翻译。要查看的另一个类是View Helper渲染选择框。
旁注:当有默认翻译器集时,您不需要执行
'label' => Zend_Registry::get('Zend_Translate')->_('companies')
因为labels are translated by default。即使您必须这样做,也可以通过Zend_Form::getTranslator()
而不是Zend_Registry
更好地检索翻译器,以避免耦合。