遵循文档here,我试图让i18n在我的AEM 6.2实例上工作:
Locale pageLang = currentPage.getLanguage(false);
ResourceBundle resourceBundle = slingRequest.getResourceBundle(pageLang);
I18n i18n = new I18n(resourceBundle);
问题是,我总是得到org.apache.sling.engine.impl.helper.NullResourceBundle
,如果找不到任何内容,它似乎只是一个空的后备捆绑。我试图在OSGi配置中预加载捆绑包,但无济于事。
即使我自己的翻译不起作用,至少它应该包含随产品提供的预定义翻译。虽然我自己出现在工具中: http://localhost:4502/libs/cq/i18n/translator.html
为什么我没有获得有效的资源包?
编辑:我做了一个简单的JSP测试并且它有效,因此它与Sling模型有关,其中代码位于@PostConstruct
方法中,其中模型是从SlingHttpServletRequest
答案 0 :(得分:2)
借助wcm.io邮件列表及其code的摘要,我能够实现这一目标:
Locale pageLang = currentPage.getLanguage(false);
SlingHttpServletRequest request = slingRequest;
SlingBindings bindings = (SlingBindings)slingRequest.getAttribute(SlingBindings.class.getName());
if (bindings != null) {
request = bindings.getRequest();
}
ResourceBundle resourceBundle = request.getResourceBundle(pageLang );
似乎SlingModels中的注入请求不是真正的请求,而是一个不包含ResourceBundle
的包装器。然后我尝试了来自wcm.io的@AemObject
,这对我来说也不起作用,然后我在邮件列表中询问了什么可能是问题。