0

zend バージョン 1.12 の zend フレームワーク プロジェクトがあります。私は xml ファイルで zend_navigation を使用し、gettext アダプターで zend_translation を使用しています。

このコードは、メイン メニューを作成します。

echo '<ul class="nav1">';
foreach ($this->container as $page) {
    // check if it is active (not recursive)
    $isActive = $page->isActive(false);
    $liClass = $isActive ? ' class="active"' : '';
    echo '<li ' . $liClass . '>' . $this->menu()->htmlify($page);
    // subnavigation in second layer
    if (sizeof($page) > 0) {
        echo '<ul class="subNavHead">';
        foreach ($page as $subpage) {
            $isActive = $subpage->isActive(false);
            $liClass = $isActive ? ' class="active"' : '';
            echo '<li ' . $liClass . '>' . $this->menu()->htmlify($subpage) . '</li>';
        }
        echo '</ul>';
    }
    echo '</li>';
}
echo '</ul>';

そして、ここに私の言語セレクタークラスがあります:

class AW_Controller_Plugin_LangSelector extends Zend_Controller_Plugin_Abstract {
    public function preDispatch(Zend_Controller_Request_Abstract $request) {
        $lang = $request->getParam('lang', '');

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

        switch ($request->getParam('lang')) {
            case 'de':
                $locale = 'de';
                break;
            case 'en':
                $locale = 'en';
                break;
            case 'pl':
                $locale = 'pl';
                break;
            default :
                $locale = 'de';
                break;
        }

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

}

選択ボックスで言語を変更すると、サイトのテキストの言語が変更されますが、ナビゲーション ターゲットは変更されません。ナビゲーションラベルも変更されます。

デフォルト言語の場合: www.example.de/de/controller/action そして、言語を英語に切り替えます -> ナビゲーションの href 属性は古い値のままです (www.example.de/de/controller /action) ただし、www.example.de/en/controller/action が必要です。

私の問題はどこですか?メニューを再レンダリングするのを忘れていませんか?

4

1 に答える 1

0

ラベル (「ホーム」、「お問い合わせ」) は変更されていますが、リンク (「/」、「/contact-us」) は変更されていないとおっしゃっていると思います。Zend_Menu が Zend_Translate をメニュー ラベルにのみ使用する方法。

メニューが URI ではなく MVC によって作成されている場合は、次の行を追加することで、言語の値を取得できます。

$page->setParam('lang', Zend_Registry::get('Zend_Locale')->getLocale());

これは、ナビゲーション レンダーの "foreach ($page as $subpage) {" と "echo" の間に配置されます。

メニューで URI を使用している場合は、ページ HREF の同じポイントで置換を行うことができます。

さて、あなたの質問を誤解していて、メニューのリンクやラベルを翻訳していない場合は、プラグインの preDispatch の前にメニューが実行されているかどうかを確認してください。

于 2013-01-07T15:25:27.060 に答える