JS Report中JS函数内使用$localizedResource做多语言翻译失效问题
代码问题排查
你写的代码存在4个核心错误,直接导致翻译失效:
- 拼写错误:JS Report 多语言实例固定为
$localizedResource(尾字母R大写),你写的$localizedresource全小写,根本无法获取多语言对象 - 属性访问逻辑错误:
this.$localizedresource.message是访问对象上固定名为message的静态属性,但message实际是存储了转换后key的变量,动态key必须用方括号语法访问 - 空逻辑分支缺失:当传入key为空时,函数没有返回值,会渲染出
undefined - 兜底逻辑缺失:如果多语言配置里找不到对应key,没有返回原始值的降级处理,会出现空白单元格
可行实现方案
1. 编写正确的翻译Helper函数
把以下代码放到模板的Helpers配置块中:
function translateKey(key) { if (!key) return '' // 转换key格式和多语言配置的键名规则对齐 const targetKey = key.toUpperCase() // 动态取对应翻译值,注意拼写和方括号访问语法 const translated = this.$localizedResource[targetKey] // 找不到翻译时兜底返回原始值 return translated || key }
2. 模板调用写法
表格单元格部分直接按如下方式调用即可:
<tr> <td class='col-narrow'>{{$localizedResource.DATE}}</td> <td class='col-narrow'>{{$localizedResource.TIME}}</td> <td class='col-narrow'>{{$localizedResource.DAY}}</td> </tr> <tr> <td class='col-narrow'>{{date}}</td> <td class='col-narrow'>{{time}}</td> <td class='col-narrow'>{{translateKey day}}</td> </tr>
3. 多语言配置校验
确保locales目录下各语言文件的星期键名和转换后的大写规则完全匹配,以中文配置为例:
{ "DATE": "日期", "TIME": "时间", "DAY": "星期", "MONDAY": "星期一", "TUESDAY": "星期二", "WEDNESDAY": "星期三", "THURSDAY": "星期四", "FRIDAY": "星期五", "SATURDAY": "星期六", "SUNDAY": "星期日" }
额外注意事项
- 如果Helper内部拿不到
this.$localizedResource,可以在报表的beforeRender脚本中提前处理day字段的翻译,再把处理后的值传给模板渲染,避免上下文绑定问题 - 不要修改多语言对象的固定拼写,JS Report的localization插件默认挂载的对象名大小写是固定的
- 如果接口返回的day值本身是大写/首字母大写,调整
targetKey的转换逻辑和配置键名保持一致即可
内容的提问来源于stack exchange,提问作者Sha
相关产品推荐
相关产品推荐

