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

Liferay 7中ADTs本地化:如何调用自定义Portlet语言文件?

在Liferay 7 ADTs中调用自定义Portlet语言文件的解决方案

你提到的问题很常见——默认的<@liferay_ui["message"] />标签确实会优先使用Liferay全局的语言资源包,要调用自定义Portlet自己的语言文件,我们有几种可行的方案,而且不一定非要用JSP,下面详细说明:

方法1:给liferay-ui:message标签指定自定义资源包

默认标签不指定bundle属性时会用全局资源包,我们可以手动传入自定义Portlet的资源包对象:

首先,你需要知道自定义Portlet的Bundle-SymbolicName(这个配置在Portlet的bnd.bnd文件里,比如Bundle-SymbolicName: com.yourcompany.your-custom-portlet)。如果你的ADT允许嵌入少量JSP代码(大部分Liferay ADT都支持),可以先获取资源包:

<%
// 替换成你的Portlet的Bundle-SymbolicName
String portletBundleName = "com.yourcompany.your-custom-portlet";
ResourceBundle portletResourceBundle = ResourceBundleUtil.getBundle(
    "content.Language", locale, portletBundleName
);
%>

之后在Freemarker部分直接使用这个资源包:

<@liferay_ui["message"] key="your-custom-language-key" bundle=portletResourceBundle />

方法2:直接用Liferay工具类获取语言值(无需JSP)

如果不想写JSP代码,也可以在纯Freemarker的ADT里直接调用ResourceBundleUtil的静态方法来获取自定义Portlet的语言值:

<#assign ResourceBundleUtil = com.liferay.portal.kernel.util.ResourceBundleUtil>
<!-- 替换成你的Bundle-SymbolicName和语言键 -->
${ResourceBundleUtil.getString("content.Language", "custom-greeting", locale, "com.yourcompany.your-custom-portlet")}

这种方法完全不需要JSP,直接在Freemarker中完成调用,适合纯模板场景。

关键注意事项

  • 确保你的自定义Portlet的语言文件放在正确路径:src/main/resources/content/Language.properties(多语言文件比如Language_zh_CN.properties也要放在同一目录下)。
  • 确认bnd.bnd里的Bundle-SymbolicName配置正确,这是Liferay识别资源包的关键标识。
  • ADT中的locale变量是Liferay自动传入的,对应当前用户的语言环境,无需额外定义。

关于是否必须用JSP的问题

不需要。上面的方法2完全基于Freemarker实现,不需要依赖JSP;方法1虽然用到了一点JSP代码,但这是可选的——如果你更倾向纯模板写法,方法2是更好的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:57:27