2011-10-08 61 views
1

我正在构建Zend Framework上的项目。我使用Zend_Translate来做我的翻译,但我想尽可能少地将额外的代码量保留在应用程序(视图)的前端。文本翻译应该是这样的:在OO环境中使用全局函数进行翻译(Zend Framework)

echo __("Text to translate"); 

使用视图助手没有这样做,因为这样我得到:

echo $this->__("Text to translate"); 

这意味着我必须从某个地方声明一个全局函数,这要求Zend_Translate完成其余的魔法。因为我希望该项目尽可能保持干净,所以我想就如何放置此功能提出一些建议。

我已经考虑在bootstrap中的_initLocale()中包含一个带有全局函数的文件。

基本上我的问题是:我现在是否违反了所有神圣的MVC原则,还是这是正确的路?

+0

http://framework.zend.com/manual/en/zend.view.helpers.html#zend.view.helpers.initial.translate在我看来$ this-> translate('blah')更清洁比一个非常模糊的__() – Corbin

回答

1

这实际上不是一个容易回答的问题。当然,你违反了面向对象的一些原则,因为你基本上用几百个小的整体来标记你的对象,应该只有一个。您应该将翻译对象注入控制器并查看一次,然后拨打$this->__()。这也很容易通过在Zend_Controller_Action和您自己的控制器之间创建一个中间层来完成。但是......翻译是一个非常具体的案例,我没有看到来自您的解决方案的潜在危害。翻译方法不太可能改变它的逻辑,如果你需要重新命名它,找到并替换两个下划线后面跟一个括号将很可能不会产生任何东西比翻译的字符串...然后再次使用'最可能'是已经有气味了。

摘要:它似乎或多或少好,但我仍然不会这样做,特别是如果它是一个具有某种意义的软件,预计使用寿命为几年。

+0

好吧,我想我在那里同意。尽管如此,它给我带来了一个新的讨论点。我已经在Zend_Controller_Action和我的控制器之间有一个层,我可以轻松地为控制器添加翻译器功能,用$ this - > __()调用。但是我还需要为我的视图添加一个函数,或者通过扩展Zend_View或者创建一个视图帮助器,在两个不同的地方给我提供相同的功能。如果我想改变我做翻译的方式(不太可能忽视),这可能会变成另一个垃圾。 – eelco