JSP の言語コードのみを使用して fmt:setLocale を fmt:formatNumber で機能させるにはどうすればよいですか?
-
20-09-2019 - |
質問
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する