3

早上好,

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

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

我目前使用以下方法添加它们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));
  }

这就是我使用 Doctrine 将字段保存到我的数据库的方式:

//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();            
  } 

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

4

1 回答 1

0

我建议你使用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_Translate 文档中所述。一旦你有了一个翻译对象,你就可以使用它们的 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);

详细指南在这里

于 2012-09-21T08:28:46.830 回答