如何读取特定的language.properties文件?

时间:2018-07-02 15:40:50

标签: liferay-7

这是我的问题。我需要生成用户选择的特定语言的PDF。有些信息包含在language.properties文件中,我无法读取当前站点语言以外的其他文件。

例如当前语言是西班牙语,而用户选择德语。我想阅读language_de.properties。

我尝试使用:

String Lang=LanguageUtil.get(LanguageUtil.getLocale('de'), "Mykey");

但没有成功,它总是返回“ Mykey”

如果我使用:

String Lang=LanguageUtil.get(HttpServletRequest, "Mykey");

它可以工作,但这是站点语言,而不是我想要的语言。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

一个选项是您忘记为de_DEportal-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");