在Zend插件中使用Zend Translate

时间:2013-01-08 06:43:58

标签: php zend-framework zend-translate

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

我该怎么办?

2 个答案:

答案 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/