zerobug/yii2-multilingual

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

安装: 9

依赖: 0

建议: 0

安全: 0

星级: 0

关注者: 1

分支: 0

类型:yii2-extension

dev-main 2021-12-16 16:03 UTC

This package is not auto-updated.

Last update: 2024-09-21 03:03:45 UTC


README

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

Build Status codecov.io

快速开始

警告:本扩展处于积极开发中。

如需支持,请加入 DotPlant2 gitter频道

安装

安装此扩展的最佳方式是通过 composer

运行以下命令之一:

php composer.phar require --prefer-dist xerobug/yii2-multilingual "dev-main"

"xerobug/yii2-multilingual": "dev-main"

将以下内容添加到您的 composer.json 文件的 require 部分。

用法

配置您的应用

在您的 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(),
            'default_language_id' => 1,
            // 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. 请记住在缓存多语言或可翻译内容时注意语言_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 包