2010-02-13 12 views
3

J'essaye de localiser la devise sur mon application Web de JSP, le problème est quand je demande des paramètres régionaux, je reçois seulement le code de langue ("en") au lieu du plein langage et code de pays ("en_US"). Problème avec ceci, formatNumber ne fonctionne pas lorsque la valeur de setLocale ne contient pas la langue et le code du pays.Comment faire pour que fmt: setLocale fonctionne sur fmt: formatNumber avec uniquement le code de langue dans JSP?

Je peux le résoudre en vérifiant la langue locale au début de la page jsp et en définissant le code pays par défaut pour quelques langues, puis en définissant la valeur de setLocale, mais cette méthode me semble plutôt moche. Existe-t-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"/> 
+0

comment vous définissez les paramètres régionaux actuellement. – Bozho

+1

Il n'a pas à! Stripes le fait! Yaay pour Stripes !!! – Pointy

Répondre

4

La monnaie dépend du pays, et non pas sur la langue. Vous avez vraiment besoin de le définir aussi. Une manière plus générique est d'utiliser un Filter pour cela, de sorte que vous n'avez pas besoin de copier le contrôle dans chaque JSP.

Mise à jour: Je vois maintenant que vous utilisez HttpServletResponse#getLocale() qui renvoie les paramètres régionaux définis par programme ou les paramètres régionaux par défaut du conteneur. La pratique normale consiste à utiliser HttpServletRequest#getLocale() pour obtenir les paramètres régionaux du client, ainsi 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.

+0

Firefox envoie seulement le code de langue afaik. Y at-il une solution de contournement? – kovike

+2

Ceci est entièrement contrôlé par le client (paramètres du navigateur et ainsi de suite), vous ne pouvez pas faire grand chose avec. – BalusC

4

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 du malheur! Stripes est votre ami!

En général, vous ne devriez pas avoir besoin d'utiliser <fmt:setLocale> car Stripes configure déjà les paramètres régionaux dans le filtre Stripes. Encore une fois, Stripes est votre ami !! Lisez à ce sujet dans le wiki Stripes:

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

+0

Est-ce que cela vous inquiète aussi du pays de la localisation? Il est à savoir ** obligatoire ** pour afficher les devises. Si oui, ce serait le chemin à parcourir. Si ce n'est pas le cas, vous aurez toujours besoin d'un filtre personnalisé qui vérifie/définit le pays des paramètres régionaux. – BalusC

+0

Le filtre local stripes sélectionne la préférence de l'en-tête HTTP (c'est-à-dire du navigateur), puis essaie de la faire correspondre à une liste de chaînes de paramètres régionaux configurée côté serveur. Oui, les chaînes locales incluent le code du pays. Si le navigateur dit simplement "en", alors Stripes fera correspondre cela avec le premier "en" locale sur le serveur, mais utilisera tout ce que le serveur avait pour "country" par défaut. – Pointy

+0

C'est alors en effet le chemin à parcourir. +1 – BalusC