web-dev-qa-db-ja.com

JSPからロケールにアクセスするにはどうすればよいですか?

現在のロケールの値に応じて、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_を取得しています。

誰かが私がこれを解決する方法を知っていますか?

14
Sergio del Amo

現在、私はこれを使用しています:

<c:set var="localeCode" value="${pageContext.response.locale}" />

これは後で${localeCode}を使用してアクセスできます

  1. スクリプレットモード、お勧めしません!スクリプトレットを使用しない理由については、 スクリプトレットを使用しない理由 を参照してください。

localeCode変数は、scriptlet内で次のようにクエリできます。

<%
  Object ob_localeCode = pageContext.getAttribute("localeCode");
  if (ob_localeCode != null) {
    String currentLanguageCode = (String) ob_localeCode;
  }
  //more code
%>
  1. スクリプレットレスモード正しい方法。 回避する方法Java JSPファイルのコード? ここでSOを参照してください。

現在、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>
19
dawez

struts2で試してみてください

<s:if test="#request.locale.language=='us'">
     <s:select name="gender" list="#{'M':'Male','F':'female'}" ></s:select>
 </s:if>
5
sunil

Strutsはロケールをセッションに配置します。ロケールを取得する正しい方法は次のとおりです。

Locale locale = (locale)request.getSession().getAttribute(Globals.LOCALE_KEY);
3
Faisal Feroz

Struts1.xのドキュメントに定数org.Apache.struts.action.LOCALEが見つかりません org.Apache.struts.Globals.LOCALE_KEY ?または他のLOCALE_KEY定数の1つ?


編集:org.Apache.struts.action.LOCALEorg.Apache.struts.Global.LOCALE_KEYvalueであるため、キーとして使用される値自体は、問題。

LOCALERequestに設定されていることを確認します。私の理解では、LOCALE_KEYが設定されている場合はPageContext.SESSION_SCOPEに設定されています。

2
Ken Gentle

この投稿はあまり役に立たなかったので、これをもう少し明確にするために新しい例を追加しました。

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ヘッダーの値をオーバーライドするドイツ語に変更されます

1
PbxMan

Struts2では、ELを使用して次のものを使用しました。

${sessionScope["org.Apache.struts2.action.LOCALE"]}

例えば。ロケールの値を出力するには:

<c:out value='${sessionScope["org.Apache.struts2.action.LOCALE"]}'/>
1

これで試してください

<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>
1

localeを取得する2つの最良の方法は、アクションによって継承されたアクションサポートのgetLocaleをJSPに使用することです。<s:hidden name="locale"/>または
<s:property value"%{locale}"/>

このメソッド でロケールが変更された場合。

それは同じではありません:
${pageContext.response.locale}

0
jeremy
<%@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>
<%}%>
0
ravi

ケンG.は答えを指摘した。

pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.SESSION_SCOPE) 

代わりに使用する必要があります

pageContext.getAttribute("org.Apache.struts.action.LOCALE",PageContext.REQUEST_SCOPE)
0
Sergio del Amo