Zend Navigation и Zend Locale

Я занят созданием многоязычного веб-сайта с ZF1. Все работает хорошо, за исключением одной вещи: многоязычной части в сочетании с навигацией Zend. Когда я открываю URL-адрес страницы разработки, стандартным языком является английский (http://website.nl/en). ). Панель навигации (основанная на Zend Navigation) показывает такие URL-адреса: /en/blog, /en/events и т. д. Но когда я меняю язык с английского на голландский (http://website.nl/nl) панель навигации по-прежнему показывает /en/home, /en/blog и т. д.

Кто-нибудь знает, в чем проблема?

Код маршрутизации:

 // Routing
 $front = Zend_Controller_Front::getInstance();

 // Remove default router
 $router = $front->getRouter();
 $router->removeDefaultRoutes();

 // Add routers from config
 $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/routes.xml');
    $router->addConfig($config, 'routes');

Код навигации:

    $this->bootstrap('layout');
    $this->bootstrap('view'); 
    $layout = $this->getResource('layout');
    $view = $layout->getView();

    // Set path to navigation.xmls
    $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml');

    // ACL
    $acl = new Application_Model_Acl();

    // Get the identity of the user
    $auth = Zend_Auth::getInstance()->getIdentity();

    $navigation = new Zend_Navigation($config);
    $view->navigation($navigation)
        ->setAcl($acl)
        ->setRole($auth->role);

Часть xml маршрутизации

    <cameloth type="Zend_Controller_Router_Route_Hostname">
        <route>websiteurl</route>
        <defaults _layout="sitecameloth/layout" module="siteCameloth" />
        <chains>
            <locale>
                <route>:locale</route>
                <defaults controller="index" locale="en" /> 
                <reqs locale="[a-z]{2,3}" />
                <chains>
                    <index>
                        <route></route>
                        <defaults _layout="sitecameloth/front" action="index" />
                    </index>

                    <news>
                        <route>blog</route>
                        <defaults controller="news" />
                        <chains>
                            <list>
                                <route>:page</route>
                                <defaults action="list" page="1" />
                            </list>
                            <read>
                                <route>:id/:title</route>
                                <defaults action="read" />
                            </read>
                        </chains>
                    </news>

Плагин локали

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
    $lang = $request->getParam('locale', '');

    if ($lang !== 'en' && $lang !== 'nl')
        $request->setParam('locale', 'en');

    $lang = $request->getParam('locale');

    if ($lang == 'en')
        $locale = 'en_US';
    else
        $locale = 'nl_NL';

    $zl = new Zend_Locale();
    $zl->setLocale($locale);
    Zend_Registry::set('Zend_Locale', $zl);

    $translate = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '.mo');
    Zend_Registry::set('Zend_Translate', $translate);
    }

person Jelle Damen    schedule 17.02.2013    source источник
comment
Вы знаете, что используете неправильную Zend Framework ;)   -  person markus    schedule 18.02.2013


Ответы (1)


Вы должны сказать роутеру, какую локаль использовать через переводчик, я делаю это в бутстрапе:

protected function _initRewrite()
    {
        $translator = new Zend_Translate('array', APPLICATION_PATH . '/language/url-fr.php', 'fr');
        $translator->addTranslation(APPLICATION_PATH . '/language/url-en.php', 'en');

        // Set the current locale for the translator
        $locale = Zend_Registry::get('Zend_Locale');
        $translator->setLocale($locale);

        // Set it as default translator for routes
        Zend_Controller_Router_Route::setDefaultTranslator($translator);

        $front_controller = Zend_Controller_Front::getInstance();
        $router = $front_controller->getRouter();

        $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', APPLICATION_ENV);
        $router->addConfig($config, 'routes');

        $router->addDefaultRoutes();
    }

Подробнее о моем ответе здесь: >Параметр языка настройки Zend Navigation для маршрута не отображается в приложении

person golbarg    schedule 18.02.2013