ziya/yii2-translate

此包最新版本(0.2.2)没有提供许可证信息。

可翻译

0.2.2 2020-05-26 00:08 UTC

This package is auto-updated.

Last update: 2024-09-26 18:03:04 UTC


README

您至少需要使用 PHP 7.1

为Yii2框架项目提供的Widget,用于JSON翻译。

composer require ziya/yii2-translate "^0.2.1"

迁移

您想可翻译的属性应该是JSON字段

  $this->createTable('{{%article}}', [
            'id' => $this->primaryKey(),
            'name' => $this->json(),
            ....
        ]);

Active Records

您的模型应该使用Translatable特质。

use Translatable; 

如果您想根据语言使其成为必需的,请使用TranslatableValidator规则,并提供所需的语言

TranslatableValidator::class

您必须使用TranslatableBehaviour类,并显示哪些属性应遵循可翻译性
TranslatableBehaviour::class

以下所有代码均带有示例
class Article extends ActiveRecord
{
    use Translatable; 


    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['name'], TranslatableValidator::class, 'languages' => ['uz','ru']],
            [['description'],'safe'],
        ];
    }

    public function behaviors()
    {
        return [
            [
                'class' => TranslatableBehaviour::class,
                'attributes' => ['name'']
            ],
        ];
    }

视图文件

您的表单将如下所示。提供languageList作为数组。

$languageList = ['eng','ru','fr'];

foreach ($languageList as $lang) {
        echo $form
            ->field($model, "name[{$lang}]")
            ->textInput(['value'=>$model->name->other($lang)])
            ->label($model->getAttributeLabel('name') . "_{$lang}");
}

表单

如果您使用的是Form而不是ActiveRecord,则需要将类型设置为Model。

默认为TYPE_ACTIVE_RECORD,因此您需要设置TYPE_MODEL。下面是如何操作的示例

class ArticleForm extends Model
{
    
    public $content;
    public function behaviors()
    {
        return [
            'translatable'=>[
                'class' => TranslatableBehaviour::className(),
                'attributes' => ['content'],
                'type' => TranslatableBehaviour::TYPE_MODEL,
            ],
        ];
    }