Zend_Controller_Router_Route:找不到翻译器 [英] Zend_Controller_Router_Route: Could not find a translator

查看:93
本文介绍了Zend_Controller_Router_Route:找不到翻译器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个多语言应用程序.在引导程序中,设置了路由:

I am developing a multilanguage application. In the bootstrap there is the routes setup:

protected function _initRoutes() {

    $this->bootstrap('frontController');
    $router = $this->frontController->getRouter();

    // PAGES ROUTE
    $page = new Zend_Controller_Router_Route(
        ':language/:ident',
        array(
            'module'  => 'core',
      'controller' => 'pagine',
      'action'  => 'view'             
        ),
        array(
            'ident' => '[a-zA-Z-_0-9]{3,}',
         'language' => '[a-z]{2}'
        )
    );

    $registrazione = new Zend_Controller_Router_Route(
        ':language/@utenti/@registrati',
        array(
            'module'  => 'core',
'controller' => 'utenti',
'action'  => 'registrazione'
        ),
        array(
         'language' => '[a-z]{2}'
        )
    );

    $router->addRoute('page', $page);
    $router->addRoute('registrazione', $registrazione);

    .....

}

我无法将默认转换器设置为Zend_Controller_Router_Route(对于已翻译的段),因为我不知道请求对象中的language参数. 我在"routeShutdown"过程中在多语言插件中获得了语言参数:

I cannot set the default translator to Zend_Controller_Router_Route (for translated segments) because i don't know the language parameter in the request object. I get the language parameter in Multilanguage Plugin during the "routeShutdown":

class Activa_Controller_Plugin_Multilanguage extends Zend_Controller_Plugin_Abstract {

public function routeShutdown(Zend_Controller_Request_Abstract $request) {
    $language = $request->getParam("language");
    $locale   = new Zend_Locale($language);

    $translate = new Zend_Translate('array', APPLICATION_PATH.'/config/lang/'.$language.'.php', $locale);

    Zend_Registry::set('Zend_Locale', $locale);
    Zend_Registry::set('Zend_Translate', $translate);

    Zend_Controller_Router_Route::setDefaultTranslator($translate);
    ////////////////////////
    // BUT NOW IS TOO LATE
    ////////////////////////
}

当我输入地址" http://servername/it/utenti/registrati 时,我收到消息找不到翻译器"的异常.

When i type the address "http://servername/it/utenti/registrati" i get the exception with the message "Could not find a translator".

我该如何解决? 安东尼奥(意大利)

How can i fix it? Antonio (Italy)

推荐答案

创建一个routeStartup()插件,您可以在其中扫描请求URI的语言环境/语言,例如使用简单的Regex.然后在路由器中创建并设置默认转换器.

Create a routeStartup() plugin, in which you scan the request URI for the locale/language, for example with a simple Regex. Then create and set the default translator in the Router.

这篇关于Zend_Controller_Router_Route:找不到翻译器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆