uniqby / yii2-ar-translatable
为 Yii2 的可翻译 ActiveRecord
1.1.1
2016-07-06 12:03 UTC
Requires
- yiisoft/yii2: *
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() ?>