Параметр языка 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, что угодно.
Как только это будет сделано, вы можете назвать свой маршрут куда угодно, и он будет в текущей локали, используя данные из специальных языковых файлов. Убедитесь, что ваш навигационный файл имеет те же имена, что и ваши маршруты, и все будет в порядке.