I18n的Zend_Form值和错误

时间:2010-03-06 15:01:46

标签: php zend-framework internationalization translation

假设这种情况

$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错误消息(例如“值是必需的”)未翻译。

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

谢谢

1 个答案:

答案 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更好地检索翻译器,以避免耦合。

相关问题