我嘗試使用i18n本地化,但是我卡住了。CQ 5.5 i18n和accept-lanugage標頭
如果我使用:
I18n i18n = new I18n(slingRequest);
i18n.get("myMessage");
我總是得到英語消息鍵:myMessage。
在accept-language頭我可以看到這些值:DE,EN; Q = 0.5
但:
request.getLocale()返回:EN
請求。 getLocales()返回:en
如果我使用下面的代碼,一切都很好:
Locale myLocale = new Locale("de");
ResourceBundle resourceBundle = slingRequest.getResourceBundle(myLocale);
I18n i18n = new I18n(resourceBundle);
爲什麼cq不能讀取「accept-language」請求頭?
ps:我用獨立的cq罐子......
在此先感謝!
對不起,我在這裏複製了代碼(只有消息鍵)。所以這只是一個錯字......我現在已經修復了這個問題。但問題依然存在。我不明白爲什麼CQ不使用接受語言頭文件... – nerd
我能夠重現相同的行爲,這不是預期的行爲,而是可解釋的,因爲SlingHttpServletRequests getLocale()方法通過評估Accept-Language請求標頭或服務器的默認區域設置來解析主Locale,具體取決於基礎Servlet容器的實現。 我想它不會評估Accept-Header,而是服務器的默認語言環境,這可能是一個錯誤,因爲CQ API描述了DefaultLocaleResolver的不同行爲。 http://dev.day.com/docs/en/cq/current/javadoc/org/apache/sling/i18n/DefaultLocaleResolver.html – Thomas