Zend_Controller_Router_Route: не удалось найти переводчик - PullRequest
2 голосов
/ 02 июня 2010

Я занимаюсь разработкой мультиязычного приложения.В начальной загрузке есть настройка маршрутов:

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 (для переведенных сегментов), потому что я не знаю языкового параметра в запросеобъект.Я получаю языковой параметр в многоязычном плагине во время «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", я получаю исключение с сообщением« Не удалось найти переводчика ».

Как это исправить? Антонио (Италия)

1 Ответ

1 голос
/ 22 августа 2010

Создайте плагин routeStartup (), в котором вы сканируете URI запроса на локаль / язык, например, с помощью простого Regex. Затем создайте и установите переводчик по умолчанию в маршрутизаторе.

...