使用Zend_Form生成动态输入



早上好,

我有一个多语言后端应用程序,它必须支持n语言。这些语言存储在数据库中,可以随时添加。现在,对于我的后端功能,我需要根据数据库中存储的语言动态生成<input>字段,例如:

  1. 德语:<input type="text" id="title_de">
  2. 英语<input type="text" id="title_en">
  3. 意大利语<input type="text" id="title_it">

我目前使用Zend_Form:像这样添加它们

foreach($languages as $language){
$title = new Zend_Form_Element_Text("title_" . $language->getPrefix());
$title->setLabel("Title " . $language->getPrefix())
->setRequired(true)
$this->addElements(array($title));
}

这就是我如何使用条令将字段保存到DB中:

//get language-dependent title and write to DB
foreach($languages as $language){
$title->setLanguage($language);
$title->setContent($form->getValue("title_" . $language->getPrefix()));
$touristArea->addTitle($title);
//persist and flush
$em->persist($touristArea);
$em->flush();            
} 

无论如何,由于我有许多依赖于语言的字段(标题、标题等),处理表单的代码可能会变得非常糟糕,我总是必须查询数据库中的语言表,才能知道生成了哪些输入。有更好的方法吗?比如用一组输入或类似的东西?感谢您的任何输入:)

我建议您使用Zend_Translate组件首先创建带有翻译的源文件->创建阵列源文件

数组源文件是纯数组。但是您必须手动定义它们,因为没有任何工具可以帮助实现这一点。但由于它们非常简单,如果您的代码按预期工作,这是查找消息的最快方法。它通常是开始翻译业务的最佳适配器。

$english = array(
'message1' => 'message1',
'message2' => 'message2',
'message3' => 'message3');
$german = array(
'message1' => 'Nachricht1',
'message2' => 'Nachricht2',
'message3' => 'Nachricht3');
$translate = new Zend_Translate(
array(
'adapter' => 'array',
'content' => $english,
'locale'  => 'en'
)
);
$translate->addTranslation(array('content' => $german, 'locale' => 'de'));

自1.5版以来,还支持将数组包含在外部文件中。您只需要提供文件名,Zend_Translate就会自动包含它并查找数组。有关源文件的更多信息,请参阅下页

然后查看Zend_Form的国际化

为了在表单中初始化I18n,您需要一个Zend_Translate对象或一个Zend-Translate_Adapter对象,如Zend_Translation文档中所述。一旦有了翻译对象,就可以使用setTranslator()方法将翻译器附加到特定的表单实例或特定的元素:

// Tell *this* form instance to use a specific translate adapter; it
// will also be used to translate validation error messages for all
// elements:
$form->setTranslator($translate);
// Tell *this* element to use a specific translate adapter; it will
// also be used to translate validation error messages for this
// particular element:
$element->setTranslator($translate);

详细指南在这里

相关内容

  • 没有找到相关文章

最新更新