2012-09-21 52 views
3

早上好,動態輸入生成和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">
  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救場到我的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();    
    } 

無論如何,我有許多語言相關的字段(標題,字幕等),處理表單的代碼可能會變得很難理解,而且我總是必須查詢我的數據庫中的語言表,以便知道生成了哪些輸入。 有沒有更好的方法來做到這一點?像一系列輸入或類似的東西?感謝您的任何輸入:)

回答

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將自動包含它並查找數組。請參閱以下page有關源文件的詳細信息

然後看看爲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); 

詳細指南here

+0

謝謝您的回答我來了在之前的'Zend_Translate'中,我會檢查出來。 – Adrenaxus

+0

如果它符合您的需求,請不要忘記接受答案。謝謝。 –

+0

你認爲我應該使用'Zend_Translate'來翻譯我的''的id,而不是像'$ title = new Zend_Form_Element_Text(「title_」。$ language-> getPrefix());''手動設置它們。 – Adrenaxus

相關問題