Liferay 7.3+版本Javascript中Liferay.Language.get("key")失效问题
Liferay 7.4版本
Liferay.Language.get调用返回key值失效解决方案 问题根因
Liferay自7.3版本起优化了前端多语言包的构建逻辑,默认仅会将编译阶段扫描识别到的多语言key注入前端语言包对象,动态传入的key不会被默认收录,因此调用时只会返回key本身。
可行解决方案
- 常规开发场景(固定多语言key)
不要通过变量传递多语言key,直接将字符串字面量传入Liferay.Language.get方法即可,示例:
这种写法下构建工具会自动识别到// 错误写法:变量传递key,构建阶段无法识别 const langKey = 'login' const loginText = Liferay.Language.get(langKey) // 正确写法:直接传入字符串字面量,构建时会自动收录该key const loginText = Liferay.Language.get('login')login这个多语言key,将其加入前端语言包,调用时即可正常返回对应语言的翻译值。 - 动态key场景(需运行时确定多语言key)
在对应前端模块的package.json文件中新增liferayLanguageExports配置项,将所有需要动态调用的多语言key全部列入配置,示例:
配置完成后重新构建部署模块,配置中列出的key都会被强制纳入前端语言包,后续动态调用也能正常返回翻译结果。{ "name": "your-custom-module", "version": "1.0.0", "liferayLanguageExports": [ "login", "logout", "submit", "cancel" ] } - 临时调试场景(仅需控制台调用验证)
可以直接在当前页面源码中搜索已加载的语言包JS文件,文件内包含当前页面已收录的所有多语言key与对应翻译值,直接检索即可查看对应翻译;也可临时将需要调试的key加入已部署模块的liferayLanguageExports配置,部署后再在控制台测试调用。
该调整是Liferay官方的优化策略,目的是缩减前端语言包体积,减少不必要的资源加载,提升页面加载性能,不属于功能bug。
内容的提问来源于stack exchange,提问作者Hani
相关产品推荐
相关产品推荐

