tigrov / yii2-language-attributes
为 Yii2 的语言属性行为
dev-master
2017-05-28 18:35 UTC
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-09-10 01:02:33 UTC
README
为 Yii2 的语言属性行为
LanguageAttributes 行为为 ActiveRecord 模型添加本地化功能。它会找到应用程序语言对应的模型字段。
例如,我们有一个包含语言字段的表:name_en
、name_ru
、name_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');