如何在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
相关产品推荐
相关产品推荐

