这是我的问题。我需要生成用户选择的特定语言的PDF。有些信息包含在language.properties文件中,我无法读取当前站点语言以外的其他文件。
例如当前语言是西班牙语,而用户选择德语。我想阅读language_de.properties。
我尝试使用:
String Lang=LanguageUtil.get(LanguageUtil.getLocale('de'), "Mykey");
但没有成功,它总是返回“ Mykey”
如果我使用:
String Lang=LanguageUtil.get(HttpServletRequest, "Mykey");
它可以工作,但这是站点语言,而不是我想要的语言。
有什么想法吗?
答案 0 :(得分:1)
一个选项是您忘记为de_DE
在portal-ext.properties
中定义locales.enabled
:
#
# Specify the locales that are enabled by default.
#
locales.enabled=en_US,de_DE,es_ES
另一种可能性是您的门户网站实例未启用语言环境。您应该在实例的管理界面中进行检查。
在两种情况下,LanguageUtil.getLocale('de')
将返回null
-这将从LanguageUtil.get
返回给定密钥。您可以通过打印LanguageUtil.getLocale('de')
和LanguageUtil.getLocale('de_DE')
(应均为null
)的结果来验证。只需将语言环境添加到已启用的语言环境中就可以了。
如果在portlet的资源包中定义了消息,则使用 third 选项(通常,您可以在一个hook或OSGI包中定义消息以在多个portlet中使用它们)。在这种情况下,LanguageUtil.get(Locale, String)
不知道您所在的Portlet,并且无法访问该Portlet的资源包。这与LanguageUtil.get(HttpServletRequest, String)
不同,后者从请求中检索portlet。
在这种情况下,您必须从分配给Portlet.init(PortletConfig)
方法的配置中检索资源束。或者,您可以使用特定于语言环境的参数来模拟LanguageUtil.get(HttpServletRequest, String)
的实现:
public class MyLanguageUtil {
public static String get(HttpServletRequest request, Locale locale, String key) {
if (request == null) {
return key;
}
PortletConfig portletConfig = (PortletConfig) request.getAttribute("javax.portlet.config");
if (portletConfig != null) {
ResourceBundle resourceBundle = portletConfig.getResourceBundle(locale);
if (resourceBundle.containsKey(key)) {
return LanguageUtil.get(resourceBundle, key, key);
}
}
return LanguageUtil.get(locale, key);
}
}
答案 1 :(得分:0)
好的,它可以工作了。 我在模块语言中为每种语言添加了一个类
2
感谢帮助
答案 2 :(得分:0)
对于那些需要通用一点的人来说。
向您的portlet中添加一个小类,以访问portlet ResourceBundle:
public class [MyPortlet]LanguageUtil {
public static String get (Locale locale, String key) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("content.Language", locale, UTF8Control.INSTANCE);
return LanguageUtil.get(resourceBundle, key);
}
public static String format (Locale locale, String pattern, Object[] arguments) {
ResourceBundle resourceBundle = ResourceBundle.getBundle("content.Language", locale, UTF8Control.INSTANCE);
return LanguageUtil.format(resourceBundle, pattern, arguments);
}
}
并借助portlet的bnd.bnd文件将其导出,例如:
Export-Package: [path.to.my.util]
这样,它可以在OSGI模块和常规JAVA类中使用,例如:
[MyPortlet]LanguageUtil.get(serviceContext.getLocale(), "my-language-string");