Yii1 translations
<?php
class TranslationBehavior extends CActiveRecordBehavior
{
public $model;
public $id;
public $secondaryId;
public $post;
public $localeField = 'locale';
public $fields = [];
public function locale($locale = Locales::DEFAULT_LANG)
{
$model = $this->model;
$translationModel = $this->getTranslationModel($locale);
if ($translationModel) {
return $translationModel;
}
return new $model;
}
public function afterSave($event)
{
$params = param($this->post);
$model = $this->model;
foreach (Locales::languages() as $lang) {
$translationModel = $this->getTranslationModel($lang);
if (!$translationModel) {
$translationModel = new $model;
}
$translationModel->{$this->localeField} = $lang;
$translationModel->{$this->secondaryId} = $event->sender->id;
foreach ($this->fields as $field) {
$translationModel->$field = $params[$lang][$field];
}
$translationModel->save();
}
}
/**
* @param string $locale
* @return CActiveRecord
*/
private function getTranslationModel($locale)
{
/**
* @var CActiveRecord $model
*/
$model = $this->model;
return $model::model()->find("{$this->secondaryId} = :id AND {$this->localeField} = :locale", [
'id' => $this->id,
'locale' => $locale
]);
}
}<?php
class Concept extends WActiveRecord
{
public static function model($className = __CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return 'concept';
}
public function behaviors()
{
return [
'translation' => [
'class' => 'TranslationBehavior',
'id' => $this->id,
'secondaryId' => 'concept_id',
'model' => ConceptContent::class,
'post' => 'Concept',
'localeField' => 'lang',
'fields' => ['name', 'description']
]
];
}
}