Yii:在导航栏中与图像进行本地化


Yii: localization in Navbar with images

如果

有一个带有多个标志的下拉菜单会很好。当我使用推特引导程序时,有没有办法在导航中显示像标志这样的图像?如果我选择一个标志,语言和标志应该会改变。

我可以显示引导支持的图标,但它们不包含标志。

我希望有些人能帮助我。 以下是我的导航。

        $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),
                        ),
                ),
            ),
        ));

正如您所注意到的,您需要标志图标才能开始。例如,您可以使用这些。您可能需要也可能不需要稍微修改返回的 CSS 以满足您的需求。

接下来,您需要创建切换 URL。这基本上归结为将当前 URL 和语言选择作为 get 参数。为您当前所在的站点创建规范链接并附加?lang=<target> 。另一种方法是简单地将开关部分附加到当前 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。

要生成您需要/想要的语言文件,请查看此内容。

要在菜单中创建必要的链接,您可以创建一个返回相应数组的函数,也可以使用三元运算符切换值,例如 labelurl,例如 'label' => ('en' == Yii::app()->language) ? 'Switch to Spanish' : 'Switch to English' .但是,这仅适用于二进制决策。如果你想提供更多的语言,你应该考虑一种不同的方法,比如我提到的功能。