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

У меня есть конфиг Zend XML, как так:

<design>
    <navigation>
        <frontend>
            <company>
                <label>Company</label>                  
                <route>sitepage</route>                                 
                <pages>
                    <about>
                        <label>About us</label>
                        <route>sitepage</route>
                        <params>
                            <page>about-us</page>
                            <language>en</language>
                        </params>                                                       
                    </about>

Вот мой маршрут страницы сайта:

resources.router.routes.sitepage.type = Zend_Controller_Router_Route
resources.router.routes.sitepage.route = ":language/page/:page"
resources.router.routes.sitepage.defaults.module ="core"
resources.router.routes.sitepage.defaults.controller = "page"
resources.router.routes.sitepage.defaults.action = "view"
resources.router.routes.sitepage.defaults.page = "home"
resources.router.routes.sitepage.defaults.language = "en"

Как вы видите, я устанавливаю параметр страницы в пределах <params> XML-узел. Я пытался добавить <language> полагая, что параметр автоматически обновится до языка приложения, но, похоже, это не сработает. Мое навигационное меню просто выводит, например, http://localhost/en/page/about-us когда это должно быть http://localhost/it/page/about-us (учитывая, что мое приложение зарегистрировано как использующее it язык). Как я могу получить навигацию для распознавания языка приложения (it)

1 ответ

Я работал по-другому...

Вот пример для главной страницы регистрации:

routes.register_index.route = @lang/@register
routes.register_index.defaults.controller = register
routes.register_index.defaults.action = index

Мой файл navigation.xml пуст, но вы можете использовать только метку и маршрут.

Возможно, вы заметили @ вместо: в моих маршрутах. Это предназначено в основном для сайтов i18n.

В моей языковой папке у меня есть обычный en.php и т. Д. И url-en.php и т. Д.

Вот как это выглядит:

<?php
return array(
    'lang' => 'en',
    'register' => 'register',
    'about' => 'about-us',
);

При этом тот же маршрут будет использоваться для /en/register, /fr/inscription и т. Д. (По одному для каждого языкового файла)

В моем Bootstrap я включаю их с инициацией Rewrite:

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();
    }

Это в основном говорит вашему приложению переводить @lang по его значению из url-lang.php в соответствии с текущей локалью. Локаль должна быть установлена ​​до этой точки в вашей начальной загрузке. Вы можете извлечь его из сеанса, куки, URL, что угодно.

Как только это будет сделано, вы можете назвать свой маршрут куда угодно, и он будет в текущей локали, используя данные из специальных языковых файлов. Убедитесь, что ваш навигационный файл имеет те же имена, что и ваши маршруты, и все будет в порядке.

Другие вопросы по тегам