Como fazer FMT: Setlocale funcionar no FMT: formatNumber com apenas código de idioma no JSP?
-
20-09-2019 - |
Pergunta
Estou tentando localizar a moeda no meu aplicativo da Web JSP, o problema é quando peço localidade, só recebo o código de idioma ("en") em vez de idioma completo e código de país ("en_us"). O problema com isso é que o formatNumber não funciona quando o valor da Setlocale não contém idioma e código de país.
Posso resolvê -lo verificando o idioma do local no início da página JSP e definindo o código do país padrão para alguns idiomas e, em seguida, definindo o valor do Setlocale, mas esse método parece muito feio para mim. Existe um jeito melhor de fazer isso?
É assim que eu faço agora:
<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"/>
Solução
A moeda depende do país, não do idioma. Você realmente precisa defini -lo também. Uma maneira mais genérica é usar um Filter
Para isso, para que você não precise copypaste o cheque em todos os JSP.
Atualizar: Agora vejo que você está usando HttpServletResponse#getLocale()
que retorna a localidade definida programaticamente ou de outra forma a localidade padrão do contêiner. A prática normal é usar HttpServletRequest#getLocale()
Para obter a localidade do cliente, assim:
${pageContext.request.locale}
Veja se isso ajuda. No entanto, você ainda precisa verificar se o país está realmente presente. UMA Filter
é o melhor lugar para isso.
Outras dicas
Você está usando listras !! As listras vão lidar com o local para você, e você deve estar recebendo do ActionBeanContext:
<c:set var='curLocale' value='${actionBean.context.locale}'/>
Não percorre as costas do Stripes! Esse é o caminho para angústia e desaprovação! Stripes é seu amigo!
Em geral, você não precisa usar <fmt:setLocale>
Porque listras Já configura o local no filtro de listras. Novamente, Stripes é seu amigo !! Leia sobre isso no Wiki do Stripes:
http://www.stripesframework.org/display/stripes/localization