我正在更新基于Zend MVC框架的正在成为多语言的php web应用程序,并试图找出将翻译对象传递给不同类/图层的最佳方法。用于传递翻译对象的设计模式?对于PHP
我的翻译大部分都是在视图级别完成的,但是有几种情况我需要从自定义库中返回状态消息。
我可以为库创建属性并设置翻译器,但我想知道是否有更好的方法将翻译器对象集成到现有的应用程序中?
我正在更新基于Zend MVC框架的正在成为多语言的php web应用程序,并试图找出将翻译对象传递给不同类/图层的最佳方法。用于传递翻译对象的设计模式?对于PHP
我的翻译大部分都是在视图级别完成的,但是有几种情况我需要从自定义库中返回状态消息。
我可以为库创建属性并设置翻译器,但我想知道是否有更好的方法将翻译器对象集成到现有的应用程序中?
您可以随时在bootstrap.php中实例化转换程序,以便它可作为全局的所有类使用。这就是我要做的,因为你可能需要在任何地方使用它。它并不优雅,但它使您无需在类需要抛出异常或返回错误消息的地方添加代码。
如果你没有那么多的控制器设置,你不能扩展基础控制器并在那里实例化翻译器吗?它应该可用于整个系统。
事情是这样的扩展:
<?php
class BaseController extends Zend_Controller_Action
{
public function init()
{
//setup translation object
}
}
?>
握住用户在Memento lanaguage,并传递通过程序逻辑,当你需要做的翻译用它识别语言。
如果使用Zend_Translate,最好使用register。
Zend_Registry::set('Zend_Translate', $translate);
这样,所有类都可以自动找到它(Zend_Form的,Zend_Validate的,...)
如果我没有记错,翻译者已经注册了该密钥,以便从视图脚本,验证器和表单中使用。 – 2012-12-20 22:51:47
你可能要考虑使用依赖注入容器,其中翻译是传递给一个条目您需要的对象,而无需手动构建对象。这样,你可以轻松地测试,让更多的高质量(可测试)的代码
看到这里的其他问题 How to use dependency injection in Zend Framework?
或本文约堵漏ZF 2 DI成ZF1 http://adam.lundrigan.ca/2011/06/using-zenddi-in-zf1/
是的,这是一个选项我倾向于,这正如你所说的不是优雅而是最实用的。尽管我可能不需要这样做,但试图将语言特定的代码提升到一定的水平,因此库只是发回控制器应该知道的状态代码。 感谢您的回复。 – AndreLiem 2009-10-07 19:29:14