Struts i18n показывает юникод вместо специального символа - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я работаю над миграцией распорок.Я обновил стойки 2.2.3.1 до 2.5.10.1 и плитки с 2.2.2 до 3.0.8

. Для перевода меток форм я использую некоторые файлы свойств, закодированные в соответствии с ISO-8859-1.Раньше это работало, символы евро, находящиеся в файле типа «\ u20AC», использовались для правильного отображения в навигаторах.

Но после обновления библиотек код \ u20AC отображается непосредственно на навигаторе, а не €.

Для отображения меток i18n в JSP я использую следующий код:

<s:text name="%{getText('lbl.to.pay', null, price)}"/>

В message_en.properties я получил:

lbl.to.pay=Your fees are {0}\u20AC

Который должен отображать:

"Ваши сборы составляют 100 €"

Но вместо этого у меня есть:

"Ваши сборы составляют 100 \ u20AC"

В каждом jsp у меня есть:

    <%@ page language="java" contentType="text/javascript; charset=UTF-8"
        pageEncoding="UTF-8"%>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

В web.xml я получил:

<jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
</jsp-config>


...
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

И в struts.xml:

<constant name="struts.i18n.encoding" value="UTF-8" />

Thisconfig раньше работал со старыми библиотеками, и я ничего не изменил после обновления библиотек.

Если я добавлю € непосредственно в jsp, он будет отображаться правильно.

Любая идея о том, чтоделать?

Редактировать :

Это отлично работает, когда я использую:

<s:text name="lbl.ccip.checkout.to.pay" />

Но все еще возникают те же проблемы с:

<s:text name="%{getText('lbl.ccip.checkout.to.pay')}" />

Итак, проблема, похоже, в методе getText (), который я должен использовать в приведенном выше примере, потому что я использую заполнитель {0}

1 Ответ

0 голосов
/ 25 сентября 2018

На самом деле, если я использую вместо вызова getText (), это работает отлично:

<s:text name="lbl.to.pay" >
    <s:param value="%{price}"/>
</s:text>
...