tigrov/yii2-language-attributes

为 Yii2 的语言属性行为

dev-master 2017-05-28 18:35 UTC

This package is auto-updated.

Last update: 2024-09-10 01:02:33 UTC


README

为 Yii2 的语言属性行为

LanguageAttributes 行为为 ActiveRecord 模型添加本地化功能。它会找到应用程序语言对应的模型字段。

例如,我们有一个包含语言字段的表:name_enname_runame_zh_cn,其中我们存储每个语言的值(en、ru、zh-CN)。

当我们尝试获取对象字段 $model->name; 时,如果当前应用程序的语言是 en-US,行为将尝试找到字段 name_en_us,然后 name_en。如果当前语言是 de 且源语言是 en,行为将尝试找到字段 name_de,然后 name,接着是源语言字段 name_en

当我们尝试获取对象字段 $model->nameList; 时,它将尝试获取当前语言的所有 name 值。$model->nameList; 返回一个值数组。

使用方法

默认情况下,属性列表包括一个属性 name

/**
 * @property string $name_en
 * @property string $name_ru
 * @property string $name_zh_cn
 */
class Model extends ActiveRecord {
    ...
    public function behaviors()
    {
        return [
            'languageAttribute' => LanguageAttributes::class,
        ];
    }
    ...
}

// this will try to find a value for the current language of an application.
$model->name;

扩展示例

/**
 * @property string $name_en
 * @property string $name_ru
 * @property string $name_zh_cn
 * @property string $field_en
 * @property string $field_ru
 * @property string $field_zh_cn
 * @property string $status
 */
class Model extends ActiveRecord {
    ...
    public function behaviors()
    {
        return [
            'languageAttribute' => [
                'class' => LanguageAttributes::class,
                'attributes' => ['name', 'field'],
                'languages' => ['en', 'ru', 'zh_cn'],
                'query' => ['where' => ['status' => 'active']],
                'sort' => true,
            ]
        ];
    }
    ...
}

// Try to find values for the current language of an application.
$model->name;
$model->field;

// Get list of all values from a model table for the current language
$model->nameList;
$model->fieldList;

// Copy all language values from $model2->name to $model->name
$model->copyValue($model2, 'name');

// Copy all language values from $model2->field2 to $model->field
$model->copyValue($model2, 'field2', 'field');