代码之家  ›  专栏  ›  技术社区  ›  mike

Zend形式值和错误的I18n

  •  0
  • mike  · 技术社区  · 14 年前

    假设这种情况

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


    表单有一个默认的翻译程序集,其中有一个翻译的短语 "my_translated_text" => "here comes the translation"

    选择框中的选项是根据用户输入的数据填充的,这意味着用户可以添加名称为的公司 my_translated_text 在“我的翻译文本”的选择框中显示为新选项。

    如果没有 disableTranslator => true 我的翻译文本 公司将被翻译成 here comes the translation

    但是如果有 禁用转换器=>是的

    理想情况下,我不想转换值,但希望转换有关选择框的所有其他内容。
    你如何处理这种情况?你有过类似的问题吗?

    谢谢你

    1 回复  |  直到 13 年前
        1
  •  1
  •   Gordon Haim Evgi    14 年前

    我理解这个问题有点困难,但是如果我理解正确,您就不希望选项值被翻译。这是不可能的 Zend_Form . 如您所说,您只能为整个元素启用/禁用转换器。

    最好的办法是创建一个自定义表单元素或装饰器。我不完全确定翻译发生在哪里,但我认为选项已经被翻译成Zend\u Form\u Multi的 _translateValue()


    旁注:当有一个默认的转换器集时,您不需要这样做

    'label' => Zend_Registry::get('Zend_Translate')->_('companies')
    

    因为 labels are translated by default . 即使你不得不这么做,译者也可以通过 Zend_Form::getTranslator() 而不是通过 Zend_Registry