tigrov / yii2-language-attributes
Behavior for language attributes for Yii2
Requires
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-12-10 01:27:58 UTC
README
Behavior for language attributes for Yii2
Behavior LanguageAttributes is adding possibility to localize ActiveRecord model. It is finding a model field for application language.
E.g. we have table with language fields: name_en
, name_ru
, name_zh_cn
where we store values for each language (en, ru, zh-CN).
When we try to get object field $model->name;
,
if current language of an application is en-US
the behavior will try to find field name_en_us
then name_en
.
If current language is de
and source language is en
the behavior will try to find field name_de
then name
and after the field for source language name_en
.
When we try to get object field $model->nameList;
,
it will try to get all name
values for current language.
$model->nameList;
returns array of values.
Using
By default attribute list consist of an attribute 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;
Extended example
/** * @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');