現在のロケールの値に応じて、jsファイルを含めたいと思います。次のようにJSPからアクセスしようとしました。
_<%@ page import="Java.util.Locale" %>
<% if( ((Locale) pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)).getLanguage().equals("de")) { %>
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
<% } else { %>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
<% } %>
_
ただし、pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)
はNULL
であるため、_Java.lang.NullPointerException
_を取得しています。
誰かが私がこれを解決する方法を知っていますか?
現在、私はこれを使用しています:
<c:set var="localeCode" value="${pageContext.response.locale}" />
これは後で${localeCode}
を使用してアクセスできます
localeCode
変数は、scriptlet内で次のようにクエリできます。
<%
Object ob_localeCode = pageContext.getAttribute("localeCode");
if (ob_localeCode != null) {
String currentLanguageCode = (String) ob_localeCode;
}
//more code
%>
現在、Spring2.5構成を使用しています。
したがって、これに続いて、元の質問に戻ると、次のようなものを実装できます。
<c:set var="localeCode" value="${pageContext.response.locale}" />
<c:choose>
<c:when test="$localecode == 'de' }">
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
</c:when>
<c:otherwise>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
</c:otherwise>
</c:choose>
または、本当に短いコードを使用して同僚に印象を与えたい場合は、次のことができます。
<c:set var="localeCode" value="${fn:toUpperCase(pageContext.response.locale)}" />
<c:set var="availLanguages" value="EN,DE" />
<c:if test="${!fn:contains(availLanguages,localeCode)}">
<c:set var="localeCode" value="EN" />
</c:if>
<script src="../themes/administration/js/languages/i18n{$localeCode}.js" type="text/javascript"> </script>
struts2で試してみてください
<s:if test="#request.locale.language=='us'">
<s:select name="gender" list="#{'M':'Male','F':'female'}" ></s:select>
</s:if>
Strutsはロケールをセッションに配置します。ロケールを取得する正しい方法は次のとおりです。
Locale locale = (locale)request.getSession().getAttribute(Globals.LOCALE_KEY);
Struts1.xのドキュメントに定数org.Apache.struts.action.LOCALE
が見つかりません org.Apache.struts.Globals.LOCALE_KEY
?または他のLOCALE_KEY
定数の1つ?
編集:org.Apache.struts.action.LOCALE
はorg.Apache.struts.Global.LOCALE_KEY
のvalueであるため、キーとして使用される値自体は、問題。
LOCALE
がRequest
に設定されていることを確認します。私の理解では、LOCALE_KEY
が設定されている場合はPageContext.SESSION_SCOPE
に設定されています。
この投稿はあまり役に立たなかったので、これをもう少し明確にするために新しい例を追加しました。
Jspからロケールを取得するには:
<%=request.getLocale()%>
これはServletRequestメソッドです。aAccept-Languageヘッダーに基づいて、クライアントがコンテンツを受け入れる優先ロケールを返します。
Struts2 Locale: <s:property value="#request.locale"/>
Struts2フレームワークのロケールを返します。これは、前の例と同じである場合と同じでない場合があります。たとえば、param request_locale = deを渡すと...
<s:url id="localeDE" namespace="/">
<s:param name="request_locale" >de</s:param>
</s:url>
<s:a href="%{localeDE}" >German</s:a>
struts2#request.localeは、元のAccept-Languageヘッダーの値をオーバーライドするドイツ語に変更されます
Struts2では、ELを使用して次のものを使用しました。
${sessionScope["org.Apache.struts2.action.LOCALE"]}
例えば。ロケールの値を出力するには:
<c:out value='${sessionScope["org.Apache.struts2.action.LOCALE"]}'/>
これで試してください
<s:if test='locale.toString() == "si"'>
<script src="../themes/administration/js/languages/i18nDE.js" type="text/javascript"> </script>
</s:if>
<s:elseif test='locale.toString() == "ta"'>
<script src="../themes/administration/js/languages/i18nEN.js" type="text/javascript"> </script>
</s:elseif>
<s:else>
ANOTHER SCRIPT
</s:else>
locale
を取得する2つの最良の方法は、アクションによって継承されたアクションサポートのgetLocale
をJSPに使用することです。<s:hidden name="locale"/>
または<s:property value"%{locale}"/>
このメソッド でロケールが変更された場合。
それは同じではありません:${pageContext.response.locale}
<%@page import="Java.util.Locale"%>
<%@page import="org.Apache.struts.Globals"%>
<%Locale locale = (Locale)session.getAttribute(Globals.LOCALE_KEY);
if (locale.getLanguage().equals("fr")) {%>
<script language="JavaScript" src="lib/js/dateofday.js" type="text/javascript"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-fr.js"></script>
<%} else {%>
<script language="JavaScript" src="lib/js/dateofday-en.js" type="text/javascript"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/lib/js/jscalendar-1.0/lang/calendar-en.js"></script>
<%}%>
ケンG.は答えを指摘した。
pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.SESSION_SCOPE)
代わりに使用する必要があります
pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)