Come rendere fmt: lavoro setLocale on fmt: formatNumber con codice di linguaggio solo in JSP?
-
20-09-2019 - |
Domanda
Sto cercando di localizzare la valuta sulla mia applicazione web JSP, problema è quando chiedo locale, ho solo codice della lingua ( "it") al posto del linguaggio pieno e il prefisso nazionale ( "it"). Problema di questo è, formatNumber non funziona quando il valore di setLocale non contiene la lingua e il paese di codice.
posso risolverlo controllando lingua locale all'inizio della pagina jsp e l'impostazione predefinita per codice del paese poche lingue e quindi impostare il valore di setLocale, ma questo metodo sembra piuttosto brutto per me. C'è un modo migliore di fare questo?
Questo è come lo faccio ora:
<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"/>
Soluzione
La moneta dipende dal paese, non sulla lingua. Hai davvero bisogno di impostarla come bene. Un modo più generico è quello di utilizzare un Filter
per questo in modo che non c'è bisogno di CopyPaste il check-in ogni JSP.
Aggiorna : ora vedo che si sta utilizzando HttpServletResponse#getLocale()
che restituisce il livello di codice impostare locale o in altro locale di default del contenitore. La prassi normale è quella di utilizzare HttpServletRequest#getLocale()
per ottenere locale del cliente, quindi in questo modo:
${pageContext.request.locale}
Vedere se questo aiuta. È comunque ancora necessario verificare se il paese è effettivamente presente. Una Filter
è il posto migliore per farlo.
Altri suggerimenti
Stai usando Stripes !! Strisce gestirà il locale per voi, e si dovrebbe essere sempre dalla ActionBeanContext:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
Non andare in giro indietro Stripes'! Questo è il percorso di angoscia e unhapiness! Stripes è tuo amico!
In generale, si dovrebbe non è necessario utilizzare <fmt:setLocale>
perché Stripes imposta già il locale nel filtro Stripes. Anche in questo caso, Stripes è tuo amico !! Leggi su questo nel wiki Stripes:
http://www.stripesframework.org/display/stripes/Localization