路线的 Zend 导航设置语言参数不会反映在应用程序中



我有一个像这样的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等任何内容中检索它。

完成此操作后,您可以使用特殊语言文件中的数据在任何地方调用路由,它将位于当前区域设置中。确保您的导航文件与路由具有相同的名称,您应该没问题。

相关内容

  • 没有找到相关文章

最新更新