Wie kann ich FMT: SetLocale auf FMT: Formatnumber mit nur Sprachcode in JSP bearbeiten?
-
20-09-2019 - |
Frage
Ich versuche, die Währung in meiner JSP -Webanwendung zu lokalisieren. Wenn ich nach Gebietsschema frage, erhalte ich nur Sprachcode ("en") anstelle von vollem Sprach- und Ländercode ("en_us"). Das Problem ist, dass Formatnumber nicht funktioniert, wenn SetLocale von SetLocale nicht Sprache und Ländercode enthält.
Ich kann es lösen, indem ich zu Beginn der JSP -Seite nach Gebietsschema überprüfe und den Standard -Ländercode für wenige Sprachen festlegt und dann den Wert von SetLocale festlegt, aber diese Methode sieht für mich ziemlich hässlich aus. Gibt es eine bessere Möglichkeit, dies zu tun?
So mache ich es jetzt:
<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"/>
Lösung
Die Währung hängt vom Land ab, nicht von der Sprache. Sie müssen es auch wirklich einstellen. Ein generischerer Weg ist, a zu verwenden Filter
dafür, damit Sie den Check in jedem JSP nicht copypastieren müssen.
Aktualisieren: Ich sehe jetzt, dass du benutzt HttpServletResponse#getLocale()
Dies gibt das programmatisch festgelegte Gebietsschema oder das Standardgebiet des Containers zurück. Die normale Praxis ist zu verwenden HttpServletRequest#getLocale()
Um das Gebietsschema des Kunden zu erhalten, also:
${pageContext.request.locale}
Sehen Sie, ob das hilft. Sie müssen jedoch noch überprüfen, ob das Land tatsächlich vorhanden ist. EIN Filter
ist der beste Ort dafür.
Andere Tipps
Du benutzt Streifen !! Stripes übernimmt das Gebietsschema für Sie, und Sie sollten es aus dem ActionBeaneContext erhalten:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
Gehen Sie nicht um Stripes zurück! Das ist der Weg zu Bedrängnis und Unhapinität! Stripes ist dein Freund!
Im Allgemeinen sollten Sie nicht verwenden müssen <fmt:setLocale>
Weil Streifen Richtet bereits das Gebietsschema im Streifenfilter ein. Wieder, Stripes ist dein Freund !! Lesen Sie dies in den Stripes Wiki:
http://www.stripesframework.org/display/stripes/localization