0

我有一个像这样的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)?

4

1 回答 1

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 等(每个语言文件一个)

在我的引导程序中,我将这些包含在重写启动中:

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 等任何内容中检索它。

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

于 2013-02-13T16:50:11.857 回答