2011-03-11 16 views
1

我需要更新一個基於Zend Framework構建的應用程序。將應用程序更新爲多語言時必須執行的步驟是什麼?

大部分文字都是硬編碼在視圖中的腳本,表格等

的應用將會在說,3種語言可以是語言特定的(內容是不一樣的所有)並有每種語言一個域(即:mygreatsite.com,monsupersite.com,ilmiosupersite.com等)

第一個問題:

什麼是「處理」這類應用的最佳方式是什麼?

我可以想像幾個解決方案,如:

每語言
  • 一個副本,使用不同的數據庫,等等...(可能不是最好的維護方式)
  • 只有一個應用程序,處理不同的內容, DB等,根據不同的區域設置(基於路線)

第二個問題:

我應該需要了解現有的代碼開始「遷移」?
建立國際化網站時,最佳做法如何?
什麼是最好的適配器? (我已經使用gettext(),我認爲這是最好的)

回答

1

我絕不是專家,但這就是我所做的。

我使用數組作爲我的翻譯適配器,因爲它更容易讓我的客戶更新,因爲它們只是普通的Joes。我使用翻譯鍵而不是句子。例如 有些人會用

$this->translate(‘Some sentence to translate’); 

我用

$this->translate(‘default-index-dashboard-title’); 

這使得它更容易讓我知道我要找的文字改變。我不知道除此之外是否還有其他優點。

您需要在引導程序中設置翻譯適配器和翻譯緩存(如果需要)。我做我這樣的:

protected function _initLocale() 
{ 
    $locale = new Zend_Locale(Zend_Locale::BROWSER); 
    $config = Zend_Registry::get('config'); 
    Zend_Registry::set('Zend_Locale', $locale->toString()); 
    return $locale; 
} 

protected function _initTranslation() 
{ 
    try{ 
     $translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/' . strtolower(Zend_Registry::get('Zend_Locale')) . '.php')); 
    }catch(Exception $e){ 
     $translate = new Zend_Translate(array('adapter' => 'array', 'content' => ROOT . '/callmanagement/languages/en_gb.php')); 
    } 

    Zend_Registry::set('Zend_Translate', $translate); 
    return $translate; 
} 

,除非網站是完全不同的,我會用一個代碼庫和共享數據存儲在一個數據庫,對本站有具體的東西其他數據庫。

你可以在bootstrap或congfig中設置多個db適配器。

$dbLocal = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => 'localhost', 
     'username' => $result['user'], 
     'password' => $result['password'], 
     'dbname' => $result['database'] 
    )); 
    Zend_Db_Table_Abstract::setDefaultAdapter($dbLocal); 

    $dbShared = new Zend_Db_Adapter_Pdo_Mysql(array(
     'host'  => 'localhost', 
     'username' => ‘root’, 
     'password' => 'pass', 
     'dbname' => 'dbname' 
    )); 

    Zend_Registry::set('db_local', $dbLocal); 
    Zend_Registry::set('db_shared', $dbShared); 
    return $dbLocal; 

你可以得到Zend表單來爲你翻譯,只需把你的翻譯鍵放到標籤字段。

$this->addElement(‘text’, ‘test’, array(‘label’ => ‘translation-key’, ‘required’ => true));

然後,如果你正在使用Zend_Db_Table_Abstract類,您可以更改默認的架構和數據庫連接這樣的:

class Default_Model_Table_Topics extends Zend_Db_Table_Abstract 
{ 
protected $_name = 'topics'; 
protected $_id = 'topic_id'; 
protected $_rowClass = 'Default_Model_Topic'; 

protected $_schema = 'dbname'; 
protected $_adapter = 'db_shared'; 

}

如果您需要任何更多的例子,我會嘗試和幫助。

+0

而不是使用'try {} catch(){}'我最好像這樣使用(http://framework.zend.com/manual/en/zend.translate.additional.html#zend.translate.additional .languages.automatic)'$ translate-> isAvailable('your-language-here')' – Poru 2011-03-11 20:17:15

+0

$ this-> translate('default-index-dashboard-title'); 這樣你的回退字符串是default-index-dashboard-title,它對最終用戶沒有意義。通過這種方法,您應該小心並確保您有翻譯 – Xerkus 2011-03-12 07:32:32

+0

這是事實,如果沒有可用的翻譯,大部分網站會回落到英語。它的任何你最舒服的。 – 2011-03-12 14:41:17

相關問題