2011-01-10 90 views
1

所以,我google'd,發現一種方法,使我的應用程序的工作與定位(這偉大工程BTW)一個數據庫適配器,現在下一個上升的問題是後備。這裏是場景:如何用db和fallback做Zend_Locale?

  • 應用程序有英文,德文,法文和韓文翻譯。
  • 英語是100%,其他則不是。
  • 如果字符串不是在德國,法國,韓國需要局部退卻到英語
  • 適配器使用和ID不是一個本地化的字符串

例子:

<?php 

    // This is init'd in the bootstrap 
    try { 
     $locale = new Zend_Locale(Zend_Locale::BROWSER); /* Q1!!! */ 
    } catch (Zend_Locale_Exception $e) { 
     $locale = new Zend_Locale('en_US'); 
    } 

    $translate = new Zend_Translate(
     'XYZ_Translate_Adapter_Db', // My adapter 
     $data,      // Populated variable 
     $locale->getLanguage(),  // Returns en, de, fr or ko 
     array()      // Options to pass to the adapter, none. 
    ); 

    // This is called from the view 
    echo $translate->_(123); /* Q2!!! */ 

?> 

回聲'd輸出將是ID 123的相應文本。現在在Q1!評論,我該如何驗證en/de/fr/ko語言環境?而對於Q2!評論,我怎麼能退卻到英語在ID 123沒有發現其他語言的情況。

而且我會處理日期和貨幣的,所以我想,以驗證fr_FR,則de_DE這個,ko_KO和像fr_CA或de_AT沒有變種。因此,對於第一部分,我需要驗證該語言環境是來自我需要的國家/語言還是他們至少是有效的語言(並強制他們到適當的國家/地區);對於最後一部分,我需要驗證,如果翻譯不在數據庫上回落到英語。

回答

1

一個Zend_Translate支持回落功能。 這裏在回退,從DE到EN

$translate = new Zend_Translate(
array(
    'adapter' => Zend_Translate::AN_XLIFF, 
    'content' => APPLICATION_PATH . '/../data/locales/', 
    'locale' => $locale->getLanguage(), 
    'scan' => Zend_Translate::LOCALE_FILENAME, 
    'useId' => true, 
    'route' => array('de' => 'en') 
    ) 
); 

注「路線」參數,將允許您設置一個備用規則的例子。 您不需要爲區域代碼自動處理而煩惱。 在一個Zend_Translate路由部分閱讀更多 http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional.rerouting