Hi,
I’m trying to set up multilingual behavior in my demo project “Trackstar”. Model “Project” is only one using this behavior. There are two languages: english and lithuanian. Everything works ok, but when I try to update model,update form displays wrong text.
Example steps:
-
Creaded new project english1 (defaultLanguage’=> ‘en’)
-
Updated english1 to lithuanian1(defaultLanguage’=> ‘lt’)
-
Switched back to english(sourceLanguage=>‘en’ and defaultLanguage’=> ‘en’)
In project listing see english1, project details also english1, but in update form lithuanian1
As I undersdand, update form this data gets from tbl_project, not from tbl_projectLang.
More details:
models/Project.php:
public function behaviors() {
return array(
'ml' => array(
'class' => 'application.models.behaviours.MultilingualBehavior',
'langClassName' => 'ProjectLang',
'langTableName' => 'projectLang',
'langForeignKey' => 'project_id',
'langField' => 'lang_id',
'localizedAttributes' => array('name', 'description'),
'localizedPrefix' => 'l_',
'languages' => Yii::app()->params['translatedLanguages'], // array('en'=>'english','lt'=>'lietuviu')
'defaultLanguage' => Yii::app()->params['defaultLanguage'], //'en'
'createScenario' => 'insert',
'localizedRelation' => 'i18nProject',
'multilangRelation' => 'multilangProject',
// 'forceOverwrite' => false,
'forceDelete' => true,
//'dynamicLangClass' => true,
),
);
}
public function defaultScope()
{
return $this->ml->localizedCriteria();
}
public function actionUpdate($id)
{
$model = $this->loadModel($id,true);
if(isset($_POST['Project']))
{
$model->attributes=$_POST['Project'];
if($model->save())
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array(
'model'=>$model,
));
}
views/project/update.php:
<?php echo $this->renderPartial('_form', array('model'=>$model)); ?>
views/project/_form.php:
<?php foreach (Yii::app()->params['translatedLanguages'] as $l => $lang) :
if($l === Yii::app()->params['defaultLanguage']) $suffix = '';
else $suffix = '_'.$l;
endforeach; ?>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'project-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'name'); ?>
<?php echo $form->textField($model,'name'.$suffix,array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'name'.$suffix); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'description'); ?>
<?php echo $form->textArea($model,'description'.$suffix,array('rows'=>6, 'cols'=>50)); ?>
<?php echo $form->error($model,'description'.$suffix); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->