3

いくつかのフラグを含むドロップダウン メニューがあると便利です。twitter-bootstrap を使用するときにナビゲーションにフラグのような画像を表示する方法はありますか? 1 つのフラグを選択すると、言語とフラグが変更されます。

ブートストラップでサポートされているアイコンを表示できますが、フラグは含まれていません。

誰かが私を助けてくれることを願っています。以下は私のナビゲーションです。

        $this->widget('bootstrap.widgets.TbNavbar', array(
            'type' => 'null', // null or 'inverse'
            'brand' => '<img src="http://localhost/images/logo.gif">',
            'brandUrl' => 'localhost',
            'collapse' => true, // requires bootstrap-responsive.css
            'items' => array(
                array(
                    'class' => 'bootstrap.widgets.TbMenu',
                    'type' => 'pills', // '', 'tabs', 'pills' (or 'list')
                    'items' => array(
                        array('label' => 'Home', 'url' => array('/site/index')),
                        array('label' => 'user create', 'url' => array('/account/user/create')),
                        array('label' => 'Contact', 'url' => array('/site/contact')),
                        array('label' => 'User', 'url' => array('/account/user/index')),
                    ),
                ),
                array(
                    'class' => 'bootstrap.widgets.TbMenu',
                    'type' => 'pills', // '', 'tabs', 'pills' (or 'list')
                    'htmlOptions' => array('class' => 'pull-right'),

                    'items' => array(

        /**Added to show, that here should appear the flag*/
                        array('label' => '','htmlOptions'=> array('src'=>'http://localhost/images/german.png'), 'url' => ''),

                        array('label' => 'Sign in', 'url' => array('/account/signup/login'), 'visible' => Yii::app()->user->isGuest),
                        array('label' => 'Sign up', 'url' => array('/account/signup/registration'), 'visible' => Yii::app()->user->isGuest),
                        array('label' => Yii::app()->user->name , 'url' => '#', 'items' => array(
                                array('label' => 'Action', 'url' => '#'),
                                array('label' => 'Another action', 'url' => '#'),
                                array('label' => 'Something else here', 'url' => '#'),
                                '---',
                                array('label' => 'Logout', 'url' => array('/account/signup/logout')),
                            ),'visible' => !Yii::app()->user->isGuest),
                        ),
                ),
            ),
        ));
4

1 に答える 1

2

お気づきのように、最初にフラグ アイコンが必要です。たとえば、これらを使用できます。必要に応じて、返された CSS を少し変更する必要がある場合とない場合があります。

次に、スイッチ URL を作成する必要があります。これは基本的に、現在の URL と言語選択を get パラメータとして持つことになります。現在アクセスしているサイトの正規リンクを作成して添付し?lang=<target>ます。もう 1 つの方法は、単純にスイッチ部分を現在の URL にアタッチし、代わりにそれを使用することです。ここ でそのようなことを概説しました。

次に、アプリケーションが実際にローカリゼーションを処理できることを確認する必要があります。あなたがその道をどこまで進んでいるのか、私にはまだわからないので、これを読んでみてください。実際にリクエストに応じて言語を切り替えるには、次のようにしますprotected/components/Controller.php

public function init() {
  parent:init();

  if (null === Yii::app()->user->getState('lang') || null !== Yii::app()->request->getQuery('lang', null)) {
        Yii::app()->user->setState('lang', Yii::app()->request->getQuery('lang','defaultLanguage'));
    }
    Yii::app()->setLanguage(Yii::app()->user->getState('lang'));

}

このように、どこにいても、言語は get パラメータに基づいて設定され、セッションが存在する限り保持されます。'defaultLanguage' を、ブラウザのユーザー エージェント文字列や訪問者の IP などに基づいてデフォルト値を決定する関数の呼び出しに置き換えることもできます。

必要な/必要な言語ファイルを生成するには、これを見てください。

メニュー内に必要なリンクを作成するには、適切な配列を返す関数を作成するか、labelやなどの値urlを三項演算子で切り替えます'label' => ('en' == Yii::app()->language) ? 'Switch to Spanish' : 'Switch to English'。ただし、これはバイナリ決定でのみ適切に機能します。より多くの言語を提供したい場合は、前述の関数など、別のアプローチを検討する必要があります。

于 2013-11-13T10:42:23.463 に答える