0

ZF1 で多言語 Web サイトを構築するのに忙しいです。zendナビゲーションと組み合わせた多言語部分という1つのことを期待して、すべてがうまく機能します。開発ページの URL を開くと、標準言語は英語 ( http://website.nl/en ) です。ナビゲーションバー (zend ナビゲーションに基づく) には、/en/blog、/en/events などのような URL が表示されます。しかし、言語を英語からオランダ語 ( http://website.nl/nl ) に変更すると、ナビゲーションバーはそのまま/en/home、/en/blog などを表示します。

誰かが問題が何であるか知っていますか?

ルーティング コード:

 // Routing
 $front = Zend_Controller_Front::getInstance();

 // Remove default router
 $router = $front->getRouter();
 $router->removeDefaultRoutes();

 // Add routers from config
 $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/routes.xml');
    $router->addConfig($config, 'routes');

ナビゲーション コード:

    $this->bootstrap('layout');
    $this->bootstrap('view'); 
    $layout = $this->getResource('layout');
    $view = $layout->getView();

    // Set path to navigation.xmls
    $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml');

    // ACL
    $acl = new Application_Model_Acl();

    // Get the identity of the user
    $auth = Zend_Auth::getInstance()->getIdentity();

    $navigation = new Zend_Navigation($config);
    $view->navigation($navigation)
        ->setAcl($acl)
        ->setRole($auth->role);

ルーティング xml の一部

    <cameloth type="Zend_Controller_Router_Route_Hostname">
        <route>websiteurl</route>
        <defaults _layout="sitecameloth/layout" module="siteCameloth" />
        <chains>
            <locale>
                <route>:locale</route>
                <defaults controller="index" locale="en" /> 
                <reqs locale="[a-z]{2,3}" />
                <chains>
                    <index>
                        <route></route>
                        <defaults _layout="sitecameloth/front" action="index" />
                    </index>

                    <news>
                        <route>blog</route>
                        <defaults controller="news" />
                        <chains>
                            <list>
                                <route>:page</route>
                                <defaults action="list" page="1" />
                            </list>
                            <read>
                                <route>:id/:title</route>
                                <defaults action="read" />
                            </read>
                        </chains>
                    </news>

ロケールプラグイン

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
    $lang = $request->getParam('locale', '');

    if ($lang !== 'en' && $lang !== 'nl')
        $request->setParam('locale', 'en');

    $lang = $request->getParam('locale');

    if ($lang == 'en')
        $locale = 'en_US';
    else
        $locale = 'nl_NL';

    $zl = new Zend_Locale();
    $zl->setLocale($locale);
    Zend_Registry::set('Zend_Locale', $zl);

    $translate = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '.mo');
    Zend_Registry::set('Zend_Translate', $translate);
    }
4

1 に答える 1

0

トランスレーターを介して使用するロケールをルーターに伝える必要があります。これはブートストラップで行います。

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();
    }

ここでの私の答えの詳細:ルートの Zend Navigation 設定言語パラメーターがアプリに反映されない

于 2013-02-18T15:08:13.553 に答える