我在我的一个插件中定义了一个翻译模式,它在视图中工作正常,但我有其他插件女巫为菜单创建一个html,我需要它来填充世界的临时翻译,但当我使用:
public function preDispatch(Zend_Controller_Request_Abstract $request){
.......
$translate = Zend_Registry::get('Zend_Translate');
$translate->_($Nrow['name']);
.......
它给了我:
消息:没有为“Zend_Translate”
键注册条目
但如果我使用print_r($translate);
,则会显示我的翻译文件的内容。
当我使用print_r(get_class_methods($translate));
时,它会返回:
数组([0] => __construct [1] => setAdapter [2] => getAdapter [3] => getCache [4] => setCache [5] => hasCache [6] => removeCache [7] => clearCache [8] => __call)
我在翻译插件中使用这些代码来设置注册:
Zend_Registry::set('Zend_Translate',$translate);
我该怎么办?
答案 0 :(得分:0)
将它放在你的引导程序中:
$translate = new Zend_Translate('YOURADAPTER', YOURLANG);
Zend_Registry::set('Zend_Translate', $translate);
现在您应该可以通过以下方式访问:
$translations = Zend_Registry::get('Zend_Translate');
// or operate on it directly:
$translation = Zend_Registry::get('Zend_Translate')->translate($string);
答案 1 :(得分:0)
据我所知,在调用Zend_Registry之前运行preDispatch,如果你想拥有Zend_Registry键,你应该将代码放在Zend_Controller_Plugin_Abstract或插件类中的postDispatch函数中。
代码更改为这些并解决了问题:
public function preDispatch(Zend_Controller_Request_Abstract $request){
.......
$translate = Zend_Registry::get('Zend_Translate');
$translate->_($Nrow['name']);
.......
了解更多信息:
http://devzone.zend.com/1224/front-controller-plugins-in-zend-framework/