sergmoro1 / yii2-lang-switcher
网站内容的语言切换器。
dev-master
2018-11-16 04:59 UTC
Requires
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-09-12 04:09:26 UTC
README
Yii支持多语言,但没有关于内容的。内容通常应该在不同网站上。
但是,对于博客,这并不方便。直接在原地进行简单的翻译。
<p class='ru'> Текст на родном языке. </p> <p class='en'> Text in native language. </p>
因此,定义了两个类:.ru
,.en
。对于当前语言ru-RU,将显示带有class .ru
的html标签,并清理带有class .en
的标签。如果按下语言切换器,将清理带有.ru
的标签,并显示带有.en
的标签。
具有"短"长度的字段(例如"标题"),语言版本通过"/"分隔。
这种方法已在这款为两种语言实现的小型扩展中实施。
语言可以是任意的。
安装
在应用目录中
$ composer require sergmoro1/yii2-lang-switcher "dev-master"
使用
在应用中注册小部件 -common/config/main.php
<?php return [ ... 'bootstrap' => [ 'LangSwitcher', ], ... 'modules' => [ 'langswitcher' => ['class' => 'sergmoro1\langswitcher\Module'], ], ... 'components' => [ 'LangSwitcher' => ['class' => 'sergmoro1\langswitcher\widgets\LangSwitcher'], ], ];
在frontend/views/layouts/main.php
或任何其他布局中调用小部件。
... use sergmoro1\langswitcher\widgets\LangSwitcher; ... <body> <?= LangSwitcher::widget(); ?>
在菜单位置放置切换器
<?php echo Html::a('rus|eng', ['langswitcher/language/switch']); ?>
在模型中应提供当前语言的数据。应在模型/common/models/Post.php
中连接行为。
public function behaviors() { return [ 'LangSwitcher' => ['class' => LangSwitcher::className()], ]; }
可以在frontend/views/post/view.php
中显示帖子内容
<?= $model->excludeByLanguage('content'); ?>
和标题。
<?= $model->splitByLanguage('title'); ?>
要显示的数据应统一,包括RSS,需要在模型common/models/Post.php
中定义一个方法fields
public function fields() { return [ 'id', 'author_id', 'slug', 'title' => function ($model) { return $model->splitByLanguage('title'); }, 'content' => function ($model) { return $model->excludeByLanguage('content'); }, 'tags', 'status', 'created_at', 'updated_at', ]; }
静态内容
要将所提出的方法应用于静态页面,需要通过excludeByLanguage()
过滤器传递内容。这要求frontend/controllers/SiteController
从扩展中定义的控制器继承。use sergmoro1\langswitcher\controllers\Controller;class SiteController extends Controller {
记住,在sitemap
中也必须考虑语言版本。