0

我在我的一个插件中定义了一个翻译模式,它在视图中工作正常,但我有其他插件女巫为菜单创建一个 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);

我该怎么办 ?

4

2 回答 2

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); 
于 2013-01-08T07:13:59.900 回答
0

据我了解 preDispatch 在调用 Zend_Registry 之前运行,如果你想拥有 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/

于 2013-01-08T10:33:32.540 回答