Я только что наткнулся на эту проблему, и использование контроллера для генерации js-кода на лету не вариант, потому что вы будете тратить ресурсы из-за запуска дополнительного процесса PHP при каждом запросе. Это может быть проблемой на сайтах с высоким трафиком.
Поэтому я реализовал другой подход:
В .js сообщения хранятся в переменных, например
var MyJsClass = {
lang:
{
foo: 'Foo',
bar: 'Bar',
},
doSomething: function()
{
console.log(this.lang.foo);
},
};
в представлении вы добавляете перевод, если текущий язык отличается от sourceLanguage приложения:
<?php
$cs = Yii::app()->clientScript;
$cs->registerScriptFile($this->module->assetsUrl.'/js/myjsclass.js');
if (Yii::app()->sourceLanguage != Yii::app()->language) {
$cs->registerScript('MyScriptID', '
MyJsClass.lang.foo = \''.Yii::t('TranslationCategory', 'Translated Foo').'\';
MyJsClass.lang.bar = \''.Yii::t('TranslationCategory', 'Translated Bar').'\';
');
}
?>