Так вот интересно как получается, почему то если просто массив так написать то лейблы меняются на русские/английские. А почему то когда с инклудом ничего, хотя файл инклудится без ошибок.
Функция t() как раз это и делает - при вызове она проверяет, есть ли переданная строка в файле перевода и если есть, то возвращает переведенную строку, если нет - то исходную.
В данном случае, если в настройках приложения указан язык ru, то перевод будет браться из файла protected\messages\ru\myapp.php, в котором будет написано:
return array(
'PASSWORD' => 'Пароль',
);
Даже если приложение использует только один язык, то использование функции перевода дает возможность легко менять отображаемые тексты, например, в файле protected\messages\en\myapp.php (для английского языка) можно написать
return array(
'PASSWORD' => 'Your password',
);
Сама настройка языка приложения может быть произведена статически в конфиге (protected\config\main.php) добавлением строки ‘language’=>‘ru’ или динамической установкой Yii::app()->language = ‘ru’.
Подход перевода с использованием функции t() гораздо легче применять на уровне всего приложения, так как в вашем случае получаться отдельные файлы со строками для attributeLabels() каждой модели, отдельные файлы для других случаев, когда нужен перевод.
Кроме того, функция t() позволяет создавать сообщения с дополнительными параметрами, например вы можете использовать это в виде (view) для вывода приглашения пользователю:
Не пользовался пока, но в скором времени собираюсь освоить.
Думаю, тут два варианта: либо вручную, либо создать Active Record класс, вьюхи, контроллер и появится возможность редактировать таблицу переводов где-нибудь в админке.
class DbMessageSource extends CDbMessageSource
{
private $_db;
public function init()
{
parent::init();
if(($this->_db=Yii::app()->getComponent($this->connectionID)) instanceof CDbConnection)
$this->_db->setActive(true);
else
throw new CException(Yii::t('yii','CDbMessageSource.connectionID is invalid. Please make sure "{id}" refers to a valid database application component.',
array('{id}'=>$this->connectionID)));
}
public function setNewTranslation($category,$message,$translation,$language=null){
if($language===null)$language=Yii::app()->language;
$sql=<<<EOD
SELECT t1.id AS id
FROM {$this->sourceMessageTable} t1, {$this->translatedMessageTable} t2
WHERE t1.id=t2.id AND t1.category=:category AND t2.language=:language AND t1.message=:message AND t2.translation=:translation
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':category',$category);
$command->bindValue(':language',$language);
$command->bindValue(':message',$message);
$command->bindValue(':translation',$translation);
$rows=$command->queryAll();
if(empty($rows)){
$sql=<<<EOD
SELECT t1.id AS id
FROM {$this->sourceMessageTable} t1
WHERE t1.category=:category AND t1.message=:message
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':category',$category);
$command->bindValue(':message',$message);
$sId=$command->queryScalar();
if(empty($sId)){
$sql=<<<EOD
INSERT INTO {$this->sourceMessageTable} (category,message) VALUES (:category,:message)
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':category',$category);
$command->bindValue(':message',$message);
$command->execute();
$sId=$this->_db->lastInsertID;
}
$sql=<<<EOD
SELECT t1.id AS id
FROM {$this->translatedMessageTable} t1
WHERE t1.id=:id AND t1.language=:language
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':id',$sId);
$command->bindValue(':language',$language);
$tId=$command->queryScalar();
if(empty($tId)){
$sql=<<<EOD
INSERT INTO {$this->translatedMessageTable} (id,language,translation) VALUES (:id,:language,:translation)
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':id',$sId);
$command->bindValue(':language',$language);
$command->bindValue(':translation',$translation);
$command->execute();
}else{
$sql=<<<EOD
UPDATE {$this->translatedMessageTable} SET translation=:translation
WHERE id=:id AND language=:language
EOD;
$command=$this->_db->createCommand($sql);
$command->bindValue(':id',$sId);
$command->bindValue(':language',$language);
$command->bindValue(':translation',$translation);
$command->execute();
}
}
return true;
}
}