gpt4 book ai didi

java - CQ 5.5 i18n 和接受语言 header

转载 作者:行者123 更新时间:2023-11-30 09:28:37 25 4
gpt4 key购买 nike

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

如果我使用:

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

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

在 accept-language header 中我可以看到这些值:de,en;q=0.5

但是:

  • request.getLocale() 返回:en

  • request.getLocales() 返回:en

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

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

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

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

提前致谢!

最佳答案

CQ/Sling(自 5.6 起)不会读取您通过 slingRequest.getLocale()(或 slingRequest .getResourceBundle(null) 隐含地使用该区域设置),而是使用用户的语言设置(JCR 中的 ~/preferences/@language)或可配置的默认值 (1)。

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

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

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

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

关于java - CQ 5.5 i18n 和接受语言 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13936658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com