0

私は次のようなzendxml構成を持っています:

<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 などに同じルートが使用されます (言語ファイルごとに 1 つ)。

私の 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 などから取得できます。

これが完了すると、ルートをどこからでも呼び出すことができ、特別な言語ファイルのデータを使用して現在のロケールになります。nav ファイルの名前がルートと同じであることを確認してください。

于 2013-02-13T16:50:11.857 に答える