Tôi vừa vấp phải vấn đề này và sử dụng bộ điều khiển để tạo mã js khi đang bay không phải là tùy chọn vì bạn sẽ lãng phí tài nguyên vì bắt đầu một quy trình PHP bổ sung trên mọi yêu cầu. Đây có thể là sự cố trên các trang web có lưu lượng truy cập cao. Vì vậy, tôi đã triển khai một cách tiếp cận khác: Trong các tin nhắn .js được lưu trữ trong Biến, ví dụ:
var MyJsClass = {
lang:
{
foo: 'Foo',
bar: 'Bar',
},
doSomething: function()
{
console.log(this.lang.foo);
},
};
trong giao diện bạn thêm bản dịch nếu ngôn ngữ hiện nay là khác với sourceLanguage của App:
<?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').'\';
');
}
?>