我有一个像这样的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
(?
我用不同的方式解决了这个问题......
以下是主注册页面的示例:
routes.register_index.route = @lang/@register
routes.register_index.defaults.controller = register
routes.register_index.defaults.action = index
我的导航.xml是空的,但您可以只使用标签和路线。
您可能已经注意到@而不是:在我的路线中。这主要是为 i18n 站点设计的。
在我的语言文件夹中,我有常规的 en.php 等和 url-en.php 等。
下面是它的样子:
<?php
return array(
'lang' => 'en',
'register' => 'register',
'about' => 'about-us',
);
这样,相同的路由将用于/en/register、/fr/inscription 等(每个语言文件一个(
在我的引导程序中,我将这些包含在重写启动中:
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();
}
这基本上告诉您的应用程序根据当前区域设置从 url-lang 翻译@lang.php的值。必须在引导程序中的这一点之前设置区域设置。您可以从会话,cookie,URL等任何内容中检索它。
完成此操作后,您可以使用特殊语言文件中的数据在任何地方调用路由,它将位于当前区域设置中。确保您的导航文件与路由具有相同的名称,您应该没问题。