0
問題:當我認爲它應該在它們之間切換時,JSTL會使用資源包的一種語言版本「卡住」;不僅僅是一次會議,還有新的會議。 Struts bean:message
標籤在同一頁上使用相同的資源包並按預期切換語言。JSTL使用一種語言版本的資源包「卡住」
這與問題無關(我認爲?),但Struts1 Action會檢查URL中是否傳遞了參數以切換英語和法語之間的語言。
String localeSwitch = request.getParameter("locale");
if (localeSwitch != null) {
if (localeSwitch.equalsIgnoreCase("en")) {
Locale locale = new Locale(Locale.ENGLISH.getLanguage(), Locale.CANADA.getCountry());
request.getSession().setAttribute(Globals.LOCALE_KEY, locale);
Config.set(request.getSession(), Config.FMT_LOCALE, locale);
} else if (localeSwitch.equalsIgnoreCase("fr")) {
Locale locale = new Locale(Locale.FRENCH.getLanguage(), Locale.CANADA.getCountry());
request.getSession().setAttribute(Globals.LOCALE_KEY, locale);
Config.set(request.getSession(), Config.FMT_LOCALE, locale);
}
}
Config.FMT_LOCALE
爲JSTL,Globals.LOCALE_KEY
爲支撐件。
在JSP(因爲我真的很困惑),我有:
<%
out.println("Config.FMT_LOCALE="+Config.get(request.getSession(), Config.FMT_LOCALE));
%>
<fmt:bundle basename="proj.resources.Resource">
<fmt:message var="mymessage" key="mymessage" />
</fmt:bundle>
${mymessage}
<%
out.println("Config.FMT_LOCALE="+Config.get(request.getSession(), Config.FMT_LOCALE));
%>
資源文件被稱爲Resource.properties
和Resource_fr.properties
。
以下每之間,應用服務器(JBoss的)重新啓動:
- (預期行爲)訪問網頁,而無需指定語言:顯示
Config.FMT_LOCALE=null
輸出, 英文消息。 - (預期行爲)指定英語的訪問頁面:
Config.FMT_LOCALE=en_CA
輸出,英語 消息顯示。 - (預期行爲)指定法語的訪問頁面:
Config.FMT_LOCALE=fr_CA
輸出,法語 消息顯示。不指定語言 - (Unxpected行爲)訪問頁面,則指定法國訪問頁:
Config.FMT_LOCALE=fr_CA
輸出,顯示英文消息。 - (Unxpected行爲)指定英文訪問頁面,則指定法國訪問頁:
Config.FMT_LOCALE=fr_CA
輸出,顯示英文消息。 - (不確定行爲)訪問頁面指定法語,然後訪問頁面指定英語:
Config.FMT_LOCALE=en_CA
輸出,顯示英文消息。