遇到一个问题一直没有察觉
在自己编写的 portlet 插件中,java 类里使用 LanauageUtil.get(locale, 'hello-world') 无法返回国际化字符串,而是返回 'hello-world'.
使用国际化有 4 种方式:
1. jsp 页面中调用,这个最简单,使用如下标签就行
<liferay-ui:message key="hello-world" />
通俗易懂 随掉随用
2. jsp 页面中套嵌 java 代码
<%= LanguageUtil.get(pageContext,"hello-world") %>
pageContext 为 jsp 的隐含对象
3. 在 controller 中调用 LanguageUtil 类的 get 方法,我在代码里就是这么写
LanguageUtil.get(themeDisplay.getLocale(), "hello-world");
却发现根本没有返回国际化字符串,深入代码发现上行代码只是在 Portal 中的 language.properties 搜寻 'hello-world',所以搜寻不到。
结果是 LanguageUtil.get() 方法缺少了 PortletConfig 参数,修改代码如下
PortletConfig portletConfig = (PortletConfig)request.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);
String message = LanguageUtil.get(portletConfig, themeDisplay.getLocale(), "hello-world");
成功返回经过国际化的字符串。
4. 上述都是使用 Liferay 提供的公共类,当然还能使用 java.util.ResourceBundle 完成国际化工作
PortletConfig portletConfig = (PortletConfig) request.getAttribute(JavaConstants.JAVAX_PORTLET_CONFIG);
ResourceBundle res = portletConfig.getResourceBundle(request.getLocale());
String message = res.getString("hello-world");
与 3 是类似的,就是多了一行代码。