国际化(i18n)工作,但重音字符没有重音

时间:2013-08-14 22:55:23

标签: spring jsp internationalization locale spring-mongo

我有一个Spring MVC J2EE应用程序,它利用Spring的localeChangeInterceptorCookieLocaleResolver来呈现语言环境驱动的支持。这是有效的,但是当我尝试使用重音符号编码字母时,前端无法按预期呈现它们。

这是我的webmvc-config.xml文件中的一个片段:

    <!-- Internalization and localization support -->
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>

    <bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="defaultLocale" value="en"/>
    </bean>

    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <ref bean="localeChangeInterceptor" />
        </property>
    </bean>

除此之外,我还有一些message_xx.properties文件,这些文件可以使我的标签变为现实。其中包含嵌入重音符号的标签:district.manager.approval=Aprobaci&#243;n del Gerente de Distrito。我的牛肉是这个在前端完全显示,而不是向我展示Aprobación del Gerente de Distrito

知道我哪里出错了吗?

3 个答案:

答案 0 :(得分:2)

.properties文件的编码通常(少数例外)预计为Latin-1。因此,为了呈现Unicode内容,您需要将字符转义为Latin-1 repertoire:

district.manager.approval=Aprobaci\u00F3n del Gerente de Distrito

或者使用可以编码为UTF8的XML属性文件。

答案 1 :(得分:1)

稍微调整一下后,我似乎遗漏了一个关键细节:当我使用JSTL <c:set>以及编码无法正常工作的Spring标签时,这似乎只会发生。事实证明,使用<c:out>时,您需要使用escapeXml="false"属性。这就是我所做的,现在似乎正在适当地运作:

这是在一页中设置的

<c:set var="headerScreenTitle">
    <spring:message code='district.manager.review.and.approval' />
</c:set>   

这是在导入的页面中使用的

<c:out value="${headerScreenTitle}" escapeXml="false" />

它非常漂亮地给了我这个:

REVISIÓN Y APROBACIÓN DEL GERENTE DE DISTRITO

感谢大家的回复!

答案 2 :(得分:0)

如果您使用html实体(例如&amp;)并使用<spring:message code="property.name" />标记打印值,请将“htmlEscape”属性设置为“false”:

<spring:message code="property.name" htmlEscape="false" />