JSP の言語コードのみを使用して fmt:setLocale を fmt:formatNumber で機能させるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2258318

質問

JSP Web アプリケーションで通貨をローカライズしようとしています。問題は、ロケールを要求すると、完全な言語と国コード (「en_US」) ではなく、言語コード (「en」) しか取得できないことです。これの問題は、setLocale の値に言語と国コードが含まれていない場合、formatNumber が機能しないことです。

JSP ページの先頭でロケール言語をチェックし、いくつかの言語にデフォルトの国コードを設定してから setLocale の値を設定することで解決できますが、この方法は私にとってかなり醜いように見えます。これを行うより良い方法はありますか?

これが私が今やっている方法です:

<c:choose>
    <c:when test="${pageContext.response.locale == 'cs'}">
        <f:setLocale value="cs_CZ" />
    </c:when>
    <c:otherwise>
        <f:setLocale value="en_US" />
    </c:otherwise>
</c:choose>
<f:formatNumber type="currency" value="${product.price}" currencyCode="CZK"/>
役に立ちましたか?

解決

通貨は言語ではなく国に依存します。これも実際に設定する必要があります。より一般的な方法は、 Filter これにより、すべての JSP でチェックをコピーペーストする必要がなくなります。

アップデート:を使用していることがわかりました HttpServletResponse#getLocale() これは、プログラムで設定されたロケール、またはコンテナのデフォルトのロケールを返します。通常の慣行は、次のように使用します。 HttpServletRequest#getLocale() クライアントのロケールを取得するには、次のようにします。

${pageContext.request.locale}

それが役立つかどうかを確認してください。ただし、その国が実際に存在するかどうかを確認する必要があります。あ Filter それには最適な場所です。

他のヒント

あなたはストライプを使用しています!ストライプはあなたのためのロケールを処理する、とあなたはActionBeanContextからそれを取得する必要があります:

<c:set var='curLocale' value='${actionBean.context.locale}'/>

は、スジ背中を中心に行ってはいけません!それは苦痛とunhapinessへのパスです!ストライプはあなたの友達です!

一般的には、ストライプがすでにストライプフィルタでロケールを設定するので<fmt:setLocale>を使用する必要はありません。の繰り返しに、のストライプは!!あなたの友達です。のこの記事を読みますストライプウィキでます:

http://www.stripesframework.org/display/stripes/Localizationする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top