uniqby/yii2-ar-translatable

为 Yii2 的可翻译 ActiveRecord

安装: 354

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 3

开放问题: 0

类型:yii2-extension

1.1.1 2016-07-06 12:03 UTC

This package is not auto-updated.

Last update: 2019-09-25 17:42:12 UTC


README

Yii2 可翻译 ActiveRecord 行为使应用程序的翻译变得非常简单

安装

Composer

安装此扩展的首选方法是通过 Composer

运行以下命令之一:

php composer.phar require uniqby/yii2-ar-translatable "dev-master"

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

"uniqby/yii2-ar-translatable": "dev-master"

配置

在 common config 中配置您的应用程序

'sourceLanguage' => 'en-US',
'language' => 'ru-RU',
'components' => [
    'languageManager' => [
        'class' => 'uniqby\yii2ArTranslatable\components\LanguageManager',
    ],
    //
    'urlManager' => [
        'class' => 'uniqby\yii2ArTranslatable\components\UrlManager',
        ...
    ],
    //
    'request' => [
        'class' => 'uniqby\yii2ArTranslatable\components\Request'
    ]
]

运行

php yii migrate --migrationPath=@uniqby/yii2ArTranslatable/migrations

该命令将创建具有两个默认语言(俄语和英语)的 languages 表。

为您的数据和翻译创建表

CREATE TABLE `news` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `category_id` int(11) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  `is_active` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `is_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `news_translation` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_id` int(11) unsigned NOT NULL,
  `language_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `short_description` text,
  `full_description` text,
  `meta_title` varchar(255) DEFAULT NULL,
  `meta_keywords` varchar(255) DEFAULT NULL,
  `meta_description` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `language_id` (`language_id`),
  KEY `fk_news_translate_news1_idx` (`object_id`),
  CONSTRAINT `fk_NewsTranslate_Language` FOREIGN KEY (`language_id`) REFERENCES `language` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_news_translate_news1` FOREIGN KEY (`owner_id`) REFERENCES `news` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

为表创建模型

@common/models/News.php

<?php
namespace common\models;

use uniqby\yii2ArTranslatable\models\prototypes\Translatable;
use Yii;

class News extends Translatable
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'news';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        ...
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => Yii::t('user/company', 'ID'),
        ];
    }
}

@common/models/translation/NewsTranslation.php

<?php

namespace common\models\translation;

use uniqby\yii2ArTranslatable\models\prototypes\Translation;
use Yii;

class NewsTranslation extends Translation
{
    /**
     * @inheritdoc
     */
    public static function tableName()
    {
        return 'news_translation';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['language_id', 'owner_id', 'title'], 'required'],
            [['language_id', 'owner_id'], 'integer'],
            [['title', 'short_description'], 'string', 'max' => 255]
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        ...
    }

    /**
     * @return \yii\db\ActiveQuery
     */
    public function getOwner()
    {
        return $this->hasOne(News::className(), ['id' => 'owner_id']);
    }
}

使用方法

$news = new News();
var_dump($news->title);

// output

小部件

将语言切换器添加到您的页面

<?= \uniqby\yii2ArTranslatable\widgets\languageSelector\LanguageSelector::widget() ?>

作者

Alexander Sazanovich,邮箱: alexander@uniq.by