Como hacer fmt: setLocale trabajo en fmt: formatNumber con sólo el código de idioma en JSP?
-
20-09-2019 - |
Pregunta
Estoy tratando de localizar la moneda en mi aplicación web JSP, el problema es cuando pido local, solo me dan código de idioma ( "en") en lugar de lenguaje completo y código de país ( "en_US"). Problema con esto es, formatNumber no funciona cuando el valor de setLocale no contiene código de idioma y el país.
Puedo resolver tras comprobar la configuración regional de idioma al principio de la página JSP y el establecimiento de código de país por defecto para algunos idiomas, y luego poner valor de setLocale, pero este método se ve muy feo para mí. ¿Hay una mejor manera de hacer esto?
Así es como lo hago ahora:
<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"/>
Solución
La moneda es dependiente en el país, no en el lenguaje. Que realmente necesita para ponerlo así. Una forma más genérica es utilizar un Filter
para esto, así que no es necesario CopyPaste el cheque en todas las JSP.
Actualizar : ahora veo que está utilizando HttpServletResponse#getLocale()
que devuelve el establecer mediante programación local o de otro tipo de contenedor regional predeterminada. La práctica habitual es utilizar HttpServletRequest#getLocale()
para obtener la configuración regional del cliente, por lo tanto:
${pageContext.request.locale}
A ver si eso ayuda. No obstante, usted todavía tiene que comprobar si el país está realmente presente. Un Filter
es el mejor lugar para eso.
Otros consejos
Usted está utilizando rayas !! Las rayas se encargará de la configuración regional para usted, y que debería estar recibiendo desde el ActionBeanContext:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
No vaya alrededor de la espalda rayas! Ese es el camino a la angustia y unhapiness! Rayas es su amigo!
En general, se debe no es necesario utilizar <fmt:setLocale>
debido a rayas ya se pone en marcha la configuración regional en el filtro de rayas. Una vez más, Rayas es su amigo !! Leer sobre este en el wiki rayas:
http://www.stripesframework.org/display/stripes/Localization