Как заставить fmt: setLocale работать на fmt: formatNumber только с кодом языка в JSP? - PullRequest
3 голосов
/ 13 февраля 2010

Я пытаюсь локализовать валюту в своем веб-приложении JSP, проблема в том, что когда я запрашиваю локаль, я получаю только код языка ("en") вместо полного языка и кода страны ("en_US"). Проблема в том, что formatNumber не работает, если значение setLocale не содержит язык и код страны.

Я могу решить эту проблему, проверив язык локали в начале страницы jsp и установив код страны по умолчанию для нескольких языков, а затем установив значение setLocale, но этот метод мне кажется довольно уродливым. Есть ли лучший способ сделать это?

Вот как я это делаю сейчас:

<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"/>

Ответы [ 2 ]

4 голосов
/ 14 февраля 2010

Вы используете нашивки !! Полосы будут обрабатывать локали для вас, и вы должны получить его из ActionBeanContext:

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

Не ходи назад по полосам! Это путь к несчастьям и несчастьям! Полоски это твой друг!

В общем, вам не нужно использовать <fmt:setLocale>, потому что Stripes уже устанавливает локаль в фильтре Stripes. Опять Stripes - ваш друг !! Прочитайте об этом в полоску вики:

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

4 голосов
/ 13 февраля 2010

Валюта зависит от страны, а не от языка. Вы действительно должны установить это также. Более общий способ - использовать Filter для этого, чтобы вам не нужно было копировать чек в каждой JSP.

Обновление : теперь я вижу, что вы используете HttpServletResponse#getLocale(), который возвращает программно установленный языковой стандарт или иначе языковой стандарт контейнера. Обычной практикой является использование HttpServletRequest#getLocale() для получения локали клиента, таким образом:

${pageContext.request.locale}

Посмотрите, поможет ли это. Однако вам все равно нужно проверить, действительно ли страна присутствует. A Filter - лучшее место для этого.

...