Struts i18n显示unicode而不是特殊字符

时间:2018-09-12 13:58:38

标签: jsp struts2 internationalization

我目前正在进行struts迁移。我从Struts 2.2.3.1升级到2.5.10.1,并将磁贴从2.2.2升级到3.0.8

对于表单标签翻译,我使用一些ISO-8859-1编码的属性文件。曾经可以使用欧元符号,该符号在“ \ u20AC”文件中,通常可以在导航器上正确显示。

但是升级图书馆后,代码\ u20AC会直接显示在导航器上,而不是€。

要在JSP中显示i18n标签,我使用以下代码:

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

此配置曾经与旧的库一起使用,在库升级后,我对此没有做任何更改。

如果我直接在jsp中添加€,则显示正确。

关于做什么的任何想法?

编辑

当我使用时,这是完美的工作:

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

但仍然存在相同的问题:

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

因此,问题似乎出在getText()方法上,由于我使用了占位符{0},因此我必须在上面的示例中使用它

1 个答案:

答案 0 :(得分:0)

实际上,如果我使用它而不是调用getText(),则效果很好:

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