2012-02-29 40 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