sergmoro1/yii2-lang-switcher

网站内容的语言切换器。

安装: 63

依赖: 0

建议者: 0

安全性: 0

星级: 1

关注者: 3

分支: 0

开放问题: 0

类型:yii2-extension

dev-master 2018-11-16 04:59 UTC

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中也必须考虑语言版本。