2012-02-29 41 views
0

我一直想知道這一點。拿這個例子來說吧:如何縮短長代碼,但仍然保持Zend框架的哲學

<?= Zend_Registry::get('translate')->_('translate me!'); 

我有我的觀點被這樣的代碼弄糊塗了。我的同事們也經常抱怨說,爲了獲得翻譯它有很多類型的合理性,並且由於它在整個地方重複,所以它變得單調乏味。

他們中有些人會喜歡它的包裝都在很短的名稱,如一些全局函數:

function t($text){ 
    return Zend_Registry::get('translate')->_($text); 
} 

但對我來說,這不是良好的設計和有點違背把我的翻譯對象在註冊表中的想法。

所以我想知道別人怎樣避免編寫所有這些不必要的代碼。

一個解決辦法是在我的控制器做:

$this->view->t = Zend_Registry::get('translate); 

,然後在我的觀點只是:

<?= $this->t('translate me!'); ?> 

另一個辦法是創造,沒有工作視圖助手:

<?= this->translate('translate me!');?> 

但它是更多的工作,並再次增加了一層邏輯頂部已經非常強大和straig thforward Zend_Registry + ZendTranslate。

+0

這可能更適合http://codereview.stackexchange.com。 FWIW,我想我會更關心可讀性。從這個角度來看,我喜歡最後一個例子。這比第一個更清楚。如果命名'translate'而不是't',全局函數也可以被我接受。 – tvanfosson 2012-02-29 15:43:02

+0

如果它關閉,我會在codereview上發佈這個問題。感謝您的輸入! – Iznogood 2012-02-29 15:47:58

+0

其實只是把它發佈到codereview。 :) – Iznogood 2012-02-29 15:50:41

回答

3

如果使用默認的設置方法翻譯,你可以用你的視圖腳本中下面的代碼:

<?= $this->translate('TEXT_SETUP_HELP_SERVERNAME'); ?> 

甚至更​​短:

<?= $this->_('TEXT_SETUP_HELP_SERVERNAME'); ?> 

從實例的application.ini:

; Setup Zend_Translate 
resources.translate.registry_key = "Zend_Translate" 
resources.translate.adapter = "array" 
resources.translate.options.logUntranslated = false 
resources.translate.options.scan = "filename" 
resources.translate.options.disableNotices = 0 
resources.translate.data = APPLICATION_PATH "/languages" 
resources.translate.locale = "en_EN" 
+1

鏈接到視圖幫手 - http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.translate – Phil 2012-03-01 05:21:28