Как заставить fmt: setLocale работать на fmt: FormatNumber только с кодом языка в JSP?

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

Вопрос

Я пытаюсь локализовать валюту в своем веб-приложении JSP, проблема в том, что когда я запрашиваю locale, я получаю только код языка ("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"/>
Это было полезно?

Решение

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

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

${pageContext.request.locale}

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top