路径的Zend Navigation设置语言参数未反映在app中

时间:2012-05-20 00:39:11

标签: zend-framework zend-route zend-navigation zend-translate zend-locale

我有一个像这样的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 个答案:

答案 0 :(得分: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();
    }

这基本上告诉你的应用程序根据当前的语言环境从url- lang .php中翻译@lang的值。必须在引导程序中的此点之前设置区域设置。您可以从会话,cookie,URL,任何内容中检索它。

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