【问题标题】:CQ 5.5 i18n and accept-lanugage headerCQ 5.5 i18n 和接受语言标头
【发布时间】:2012-12-05 21:02:44
【问题描述】:

我尝试使用 i18n 本地化,但我卡住了。

如果我使用:

I18n i18n = new I18n(slingRequest);
i18n.get("myMessage");

我总是收到英文键的消息:myMessage。

在接受语言标题中,我可以看到这些值:de,en;q=0.5

但是:

  • request.getLocale() 返回:zh

  • request.getLocales() 返回:zh

如果我使用下面的代码一切都很好:

Locale myLocale = new Locale("de");    
ResourceBundle resourceBundle = slingRequest.getResourceBundle(myLocale);   
I18n i18n = new I18n(resourceBundle);

为什么 cq 不读取“accept-language”请求标头?

ps:我用的是独立的cq jar...

提前致谢!

【问题讨论】:

    标签: java servlets internationalization adobe aem


    【解决方案1】:

    CQ/Sling(从 5.6 开始)读取您通过 slingRequest.getLocale()(或隐式使用该语言环境的 slingRequest.getResourceBundle(null))获得的语言环境的 Accept-Language 标头,而是使用用户的语言设置(JCR 中的~/preferences/@language)或可配置的默认设置 (1)。

    原因是固定设置比猜测语言标头更稳定,即使在跨设备使用不同浏览器时也是如此。

    但它是可扩展的:您可以挂钩自定义org.apache.sling.i18n.RequestLocaleResolver 服务(具有更高的服务等级),该服务提供slingRequest.getLocale() 的值(2)。这也可以考虑接受语言;它可以访问底层的 servlet 请求对象,这应该会为您提供 getLocale()getLocales() 中的 Accept-Language 标头值(至少 CQ 中的内置 servlet 引擎从 5.4 开始就是这样做的)。

    (1) 在该服务上配置默认语言环境:http://localhost:4502/system/console/configMgr/org.apache.sling.i18n.impl.JcrResourceBundleProvider

    (2) 您可能在堆栈跟踪中看到的 Sling 的 I18nFilter 已经发挥了所有作用,并使用 RequestLocaleResolverResourceBundleProvider 服务包装了提供 slingRequest.getLocale()slingRequest.getResourceBundle() 实现的请求

    【讨论】:

      【解决方案2】:

      第一个代码示例复制粘贴了吗?如果示例是从您的代码中粘贴的,那么您的密钥中的拼写错误可能是问题所在,因为您的示例中的语言密钥是“myMessage”而不是“myMessage”,如您的帖子后面所述。

      【讨论】:

      • 对不起,我在这里复制时更改了代码(仅消息键)。所以这只是一个错字......我现在已经在问题中修复了它。但问题依然存在。我不明白为什么 CQ 不使用接受语言标头...
      • 我能够重现相同的行为,这不是预期的行为,但可以解释为 SlingHttpServletRequests getLocale() 方法通过评估 Accept-Language 请求标头或服务器的默认区域设置来解析主要区域设置,取决于底层 Servlet 容器实现的方法。我猜它不会评估 Accept-Header 但服务器默认语言环境这可能是一个错误,因为 CQ API 描述了 DefaultLocaleResolver 的不同行为。 dev.day.com/docs/en/cq/current/javadoc/org/apache/sling/i18n/…
      猜你喜欢
      • 2023-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-06
      • 2022-06-10
      • 2014-10-15
      • 2011-09-03
      相关资源
      最近更新 更多