devgroup/yii2-multilingual

允许使用区域URL和域名构建支持多语言的yii2应用程序

安装: 2,635

依赖: 7

建议者: 0

安全: 0

星级: 14

关注者: 10

分支: 8

类型:yii2-extension

0.2.1 2016-10-24 13:21 UTC

This package is auto-updated.

Last update: 2024-09-11 14:26:53 UTC


README

允许使用区域URL和域名构建支持多语言的yii2应用程序

Build Status codecov.io

快速开始

警告: 此扩展正在积极开发中。

如需支持 - 加入 DotPlant2 gitter频道

安装

安装此扩展的首选方法是使用 composer

运行以下命令之一:

php composer.phar require --prefer-dist devgroup/yii2-multilingual "*"

或者将以下内容添加到你的 composer.json 文件的require部分:

"devgroup/yii2-multilingual": "*"

使用

使用方法

配置你的应用程序

在你的 web.php 配置中添加以下组件

        // URL Manager is needed to build correct URL's
        'urlManager' => [
            'class' => \DevGroup\Multilingual\components\UrlManager::className(),
            'excludeRoutes' => [
                //'newsletter/index',
                //'newsletter/test',
            ],
            'rules' => [
                '' => 'post/index',
            ],
        ],
        // this is the main language and geo detection component
        'multilingual' => [
            'class' => \DevGroup\Multilingual\Multilingual::className(),
            // the list of handlers that will try to detect information(see also sypex-geo-daemon provider)
            'handlers' => [
                [
                    'class' => \DevGroup\Multilingual\DefaultGeoProvider::className(),
                    'default' => [
                        'country' => [
                            'name' => 'England',
                            'iso' => 'en',
                        ],
                    ],
                ],
            ],
        ],
        // this is simple storage for Languages configuration
        'filedb' => [
            'class' => 'yii2tech\filedb\Connection',
            'path' => __DIR__ . '/data',
        ],

创建可翻译的ActiveRecord

由于我们的实现基于 creocoder/yii2-translatable - 创建多语言ActiveRecord的使用方法非常相似。

creocoder2/yii2translatable 的主要区别

  • 不需要设置 translationAttributes - 它们会自动从翻译模型中检测
  • 语言字段是整数类型的 language_id

在你的ActiveRecord类(例如 Post)中添加特性和行为

use DevGroup\Multilingual\behaviors\MultilingualActiveRecord;
use DevGroup\Multilingual\traits\MultilingualTrait;

/**
 * Class Post
 * @property integer $author_id
 */
class Post extends \yii\db\ActiveRecord
{
    use MultilingualTrait;

    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            'multilingual' => [
                'class' => MultilingualActiveRecord::className(),
                'translationPublishedAttribute' => 'is_active',
            ],
        ];
    }


    public static function tableName()
    {
        return '{{%post}}';
    }
}

HrefLang

在你的布局视图的HEAD部分添加一行

<?= \DevGroup\Multilingual\widgets\HrefLang::widget() ?>

提示

  1. 记住在缓存多语言或可翻译内容时要留意 language_id
  2. 在请求排除的路由中可能没有 language_id,但可能有 cookie_language_id
  3. 如果你要从控制台应用程序生成URL,可能需要配置额外的参数(参见 https://github.com/DevGroup-ru/yii2-multilingual-demo/blob/master/config/console.php
  4. MultilingualTrait 添加了默认的查找条件,不是必需的。但如果你不使用它 - 你必须手动配置适当的关联。
  5. 为你的翻译表添加索引,特别是对于 language_idmodel_id 对。

致谢和灵感来源

  • Michael Härtl - codemix/yii2-localeurls 的作者
  • 公司 BINOVATOR - SypexGeo 数据库和 php 类的作者
  • Alexander Kochetov (@creocoder) - yii2-translatable 包