You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CJavaScriptExpression中使用Yii 1.1的翻译功能

解决方法

核心逻辑很简单:你现在写的JS代码是嵌套在PHP字符串里的,没法直接在JS字符串里写PHP语法生效,需要通过PHP字符串拼接把Yii::t()的翻译结果插入到对应位置即可。为了避免翻译内容里有特殊字符导致JS语法报错,推荐用Yii自带的CJSON::encode()处理翻译结果,它会自动把内容转成合法的JS字符串格式,不用手动处理引号转义。

修改后的完整代码如下:

<?php 
    $this->widget('zii.widgets.jui.CJuiButton',array(
    'name'=>'save',
    'caption'=>Yii::t('app', 'Save'),
    'htmlOptions'=>array(
        'style'=>'background: #EA7500; color: white;',
    ),
    'onclick'=>new CJavaScriptExpression(
        'function(){
            swal('.CJSON::encode(Yii::t('app', 'Saved')).', 
                '.CJSON::encode(Yii::t('app', 'Successfully saved')).', 
                "success");
            saveInputFunction();
            return false;
        }'
    ),
)); ?>

补充说明

CJSON::encode会自动给翻译后的字符串加上双引号,同时转义字符串内的单双引号、换行、特殊符号等内容,完全避免JS语法错误。如果不想用这个方法,也可以手动用addslashes转义后拼接,写法如下:

'swal("'.addslashes(Yii::t('app', 'Saved')).'", "'.addslashes(Yii::t('app', 'Successfully saved')).'", "success");'

不过这种方式的转义覆盖场景不如CJSON::encode全面,更推荐第一种写法。

内容的提问来源于stack exchange,提问作者leob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:45:05