Comment faire fmt: travail setLocale sur fmt: formatNumber avec seulement le code de langue JSP?

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

Question

Je suis en train de localiser la monnaie sur mon application Web JSP, problème est quand je demande locale, je ne reçois que le code de langue ( « en ») au lieu de la langue et complète le code du pays ( « en_US »). Problème est, formatNumber de travail ne marche pas lorsque la valeur de setLocale ne contient pas la langue et le code du pays.

Je peux le résoudre en vérifiant la langue locale au début de la page jsp et réglage du code de pays par défaut pour quelques langues et la mise en valeur de setLocale, mais cette méthode me semble assez laid. Y at-il une meilleure façon de le faire?

Voici comment je le fais maintenant:

<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"/>
Était-ce utile?

La solution

La monnaie dépend du pays, et non pas sur la langue. Vous avez vraiment besoin de mettre aussi. Une façon plus générique est d'utiliser un Filter pour cela pour que vous ne avez pas besoin de copypaste la vérification dans tous les JSP.

Mise à jour : Je vois maintenant que vous utilisez HttpServletResponse#getLocale() qui renvoie les paramètres régionaux définir par programme ou autre lieu par défaut du conteneur. La pratique normale consiste à utiliser HttpServletRequest#getLocale() pour obtenir les paramètres régionaux du client, donc si:

${pageContext.request.locale}

voir si cela aide. Vous devez cependant toujours vérifier si le pays est réellement présent. Un Filter est le meilleur endroit pour cela.

Autres conseils

Vous utilisez Stripes !! Stripes gérer les paramètres régionaux pour vous, et vous devriez obtenir à partir du ActionBeanContext:

<c:set var='curLocale' value='${actionBean.context.locale}'/>

Ne pas faire le tour de dos Stripes! C'est le chemin de la détresse et unhapiness! Stripes est votre ami!

En général, vous ne devriez pas besoin d'utiliser <fmt:setLocale> parce que Stripes déjà met en place les paramètres régionaux dans le filtre Stripes. Encore une fois, Stripes est votre ami !! En savoir plus sur cette dans le wiki Stripes:

http://www.stripesframework.org/display/stripes/Localization

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top