Como fazer FMT: Setlocale funcionar no FMT: formatNumber com apenas código de idioma no JSP?

StackOverflow https://stackoverflow.com/questions/2258318

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"/>
Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top