Model view controller 在OO环境中使用全局函数进行翻译(Zend框架)

Model view controller 在OO环境中使用全局函数进行翻译(Zend框架),model-view-controller,zend-framework,translate,Model View Controller,Zend Framework,Translate,我正在做一个基于Zend框架的项目。我使用Zend_Translate进行翻译,但我希望将应用程序(视图)前端的额外代码量保持在尽可能低的水平。文本的翻译应如下所示: echo __("Text to translate"); 使用视图辅助对象并不能做到这一点,因为这样我会得到: echo $this->__("Text to translate"); 这意味着我必须在某个地方声明一个全局函数,它调用Zend_Translate来完成其余的工作。因为我希望项目尽可能保持干净,所以我想要

我正在做一个基于Zend框架的项目。我使用Zend_Translate进行翻译,但我希望将应用程序(视图)前端的额外代码量保持在尽可能低的水平。文本的翻译应如下所示:

echo __("Text to translate");
使用视图辅助对象并不能做到这一点,因为这样我会得到:

echo $this->__("Text to translate");
这意味着我必须在某个地方声明一个全局函数,它调用Zend_Translate来完成其余的工作。因为我希望项目尽可能保持干净,所以我想要一些关于将此功能放置在何处的建议

我考虑过在引导程序的_initLocale()中包含一个带有全局函数的文件


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

这其实不是一个容易回答的问题。当然,你违反了OOP的一些原则,因为你基本上是用数百个小整体来标点你的对象,而这些小整体应该只有一个。您应该将转换对象注入到控制器和视图中一次,然后调用
$this->\uuu()
。这也可以通过在
Zend\u Controller\u Action
和您自己的控制器之间创建一个中间层来轻松实现。但是翻译是一个非常具体的案例,我看不出你的解决方案有多大的潜在危害。翻译方法不太可能改变它的逻辑,如果需要重命名它,查找并替换两个下划线和一个括号,很可能只会生成翻译后的字符串。。。再说一次,“最有可能”的用法已经是一种气味了


总结:这看起来或多或少还行,但我还是不会这么做,特别是如果它是一个具有某种意义的软件,预期寿命为几年。

这实际上不是一个容易回答的问题。当然,你违反了OOP的一些原则,因为你基本上是用数百个小整体来标点你的对象,而这些小整体应该只有一个。您应该将转换对象注入到控制器和视图中一次,然后调用
$this->\uuu()
。这也可以通过在
Zend\u Controller\u Action
和您自己的控制器之间创建一个中间层来轻松实现。但是翻译是一个非常具体的案例,我看不出你的解决方案有多大的潜在危害。翻译方法不太可能改变它的逻辑,如果需要重命名它,查找并替换两个下划线和一个括号,很可能只会生成翻译后的字符串。。。再说一次,“最有可能”的用法已经是一种气味了


总结:它看起来或多或少还行,但我还是不会这么做,特别是如果它是一个具有某种意义的软件,预期使用寿命为几年。

在我看来,$this->translate('blah')比我认为非常模糊的('uuuuuu())要干净得多,我想我同意这一点。不过,这给我带来了一个新的讨论点。我已经在Zend_Controller_Action和我的控制器之间建立了一个层,在这个层中,我可以轻松地为控制器添加转换函数,并使用$this->u u()调用。但是我还需要在视图中添加一个函数,或者扩展Zend_视图,或者创建一个viewhelper,在两个非常不同的位置提供相同的功能。如果我想改变我翻译的方式(不是太不可能忽略),这可能会成为另一个难题。好吧,我想我同意这一点。不过,这给我带来了一个新的讨论点。我已经在Zend_Controller_Action和我的控制器之间建立了一个层,在这个层中,我可以轻松地为控制器添加转换函数,并使用$this->u u()调用。但是我还需要在视图中添加一个函数,或者扩展Zend_视图,或者创建一个viewhelper,在两个非常不同的位置提供相同的功能。如果我想改变我翻译的方式(不是太不可能忽略),这可能会成为另一个难题。