user1007017 / yii2-language-picker
Yii2 语言选择器小部件
1.2.0
2015-09-01 16:53 UTC
Requires
- phpspec/php-diff: >=1.0.2
- yiisoft/yii2: *
README
Yii2 语言选择器小部件
简介
这个小部件提供了一种易于使用的语言选择器,使我们能够轻松更改网站的语言。语言更改可以同步或异步(通过Ajax)进行。默认方法是异步(通过Ajax调用),但如果由于任何原因(例如客户端上JavaScript被阻止)该方法失败,则新语言将通过自动页面刷新同步更新。
语言切换器可以完全自定义。然而,预定义选项提供了一个下拉列表(下拉列表)和一个基于链接的列表(按钮列表)。两个版本都可以显示所选语言及其相应的国旗(图标)。
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一:
php composer.phar require --prefer-dist user1007017/yii2-language-picker "1.*"
或者
"user1007017/yii2-language-picker": "1.*"
将以下内容添加到您的 composer.json
文件的 require 部分。
配置
语言元素的标识符。例如:en, en-US
最小配置(仅图标)
'language' => 'en', 'bootstrap' => ['languagepicker'], 'components' => [ 'languagepicker' => [ 'class' => 'user1007017\languagepicker\Component', 'languages' => ['en', 'de', 'fr'] // List of available languages (icons only) ] ],
最小配置(图标和文本)
'language' => 'en', 'bootstrap' => ['languagepicker'], 'components' => [ 'languagepicker' => [ 'class' => 'user1007017\languagepicker\Component', // List of available languages (icons and text) 'languages' => ['en' => 'English', 'de' => 'Deutsch', 'fr' => 'Français'] ] ],
完整配置(仅图标)
'language' => 'en-US', 'bootstrap' => ['languagepicker'], 'components' => [ 'languagepicker' => [ 'class' => 'user1007017\languagepicker\Component', 'languages' => ['en-US', 'de-DE', 'fr-FR'], // List of available languages (icons only) 'cookieName' => 'language', // Name of the cookie. 'cookieDomain' => 'example.com', // Domain of the cookie. 'expireDays' => 64, // The expiration time of the cookie is 64 days. 'callback' => function() { if (!\Yii::$app->user->isGuest) { $user = \Yii::$app->user->identity; $user->language = \Yii::$app->language; $user->save(); } } ] ],
与 Yii2-translate-manager 集成
最小配置(仅图标)
'language' => 'en', 'bootstrap' => ['languagepicker'], 'components' => [ 'languagepicker' => [ 'class' => 'user1007017\languagepicker\Component', 'languages' => function () { // List of available languages (icons only) return array_keys(\user1007017\translatemanager\models\Language::getLanguageNames(true)); } ] ],
完整配置(图标和文本)
'language' => 'en-US', 'bootstrap' => ['languagepicker'], 'components' => [ 'languagepicker' => [ 'class' => 'user1007017\languagepicker\Component', 'languages' => function () { // List of available languages (icons and text) return \user1007017\translatemanager\models\Language::getLanguageNames(true); }, 'cookieName' => 'language', // Name of the cookie. 'cookieDomain' => 'example.com', // Domain of the cookie. 'expireDays' => 64, // The expiration time of the cookie is 64 days. 'callback' => function() { if (!\Yii::$app->user->isGuest) { $user = \Yii::$app->user->identity; $user->language = \Yii::$app->language; $user->save(); } } ] ],
重要
要使用此小部件,urlManager 配置中 enablePrettyUrl 属性的值必须是 true,showScriptName 的值必须是 false。
示例
'components' => [ // ... 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ // your rules go here ], // ... ], // ... ]
使用 urlManager。
用法
显示语言选择器
显示预定义的语言选择器按钮(图标和文本或仅图标)
<?= \user1007017\languagepicker\widgets\LanguagePicker::widget([ 'skin' => \user1007017\languagepicker\widgets\LanguagePicker::SKIN_BUTTON, 'size' => \user1007017\languagepicker\widgets\LanguagePicker::SIZE_SMALL ]); ?>
显示预定义的语言选择器下拉列表(图标和文本或仅图标)
<?= \user1007017\languagepicker\widgets\LanguagePicker::widget([ 'skin' => \user1007017\languagepicker\widgets\LanguagePicker::SKIN_DROPDOWN, 'size' => \user1007017\languagepicker\widgets\LanguagePicker::SIZE_LARGE ]); ?>
自定义语言选择器
<?= \user1007017\languagepicker\widgets\LanguagePicker::widget([ 'itemTemplate' => '<li><a href="{link}" title="{language}"><i id="{language}"></i> {name}</a></li>', 'activeItemTemplate' => '<a href="{link}" title="{language}"><i id="{language}"></i> {name}</a>', 'parentTemplate' => '<div class="language-picker dropdown-list {size}"><div>{activeItem}<ul>{items}</ul></div></div>', 'languageAsset' => 'user1007017\languagepicker\bundles\LanguageLargeIconsAsset', // StyleSheets 'languagePluginAsset' => 'user1007017\languagepicker\bundles\LanguagePluginAsset', // JavaScripts ]); ?>
其他示例:隐藏活动语言
NavBar::begin([
'brandLabel' => Html::img('@web/css/images/logo.png', ['class' => 'img-responsive','alt' => Yii::$app->name]),
'brandUrl' => Yii::$app->homeUrl,
'options' => [
'class' => 'navbar navbar-default navbar-fixed-top',
],
]);
$aNavOptionsTop = [
'options' => ['class' => 'navbar-nav navbar-left'],
// 'options' => ['class' => 'nav nav-justified '],
'items' => $items
];
echo Nav::widget($aNavOptionsTop);
//---------------------------LANGUAGE PICKER ---------------------------------------------
echo \user1007017\languagepicker\widgets\LanguagePicker::widget([
'skin' => \user1007017\languagepicker\widgets\LanguagePicker::SKIN_BUTTON,
'size' => \user1007017\languagepicker\widgets\LanguagePicker::SIZE_SMALL,
'itemTemplate' => '<a href="{link}" title="{language}"> {name}</a>',
//hide active language (display:none):
'activeItemTemplate' => '<a style="display:none" href="{link}" title="{language}" class="active"></a>',
// parentTemplate without {size} !!!:
'parentTemplate' => '<ul style="list-style: none;" class="navbar-nav navbar-right nav"><li>{items}</li></ul>',
]);
//-------------------------------------------------------------------------------
NavBar::end();