Как заставить fmt: setLocale работать на fmt: FormatNumber только с кодом языка в JSP?
-
20-09-2019 - |
Вопрос
Я пытаюсь локализовать валюту в своем веб-приложении 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