我有一个Spring MVC J2EE应用程序,它利用Spring的localeChangeInterceptor
和CookieLocaleResolver
来呈现语言环境驱动的支持。这是有效的,但是当我尝试使用重音符号编码字母时,前端无法按预期呈现它们。
这是我的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ón del Gerente de Distrito
。我的牛肉是这个在前端完全显示,而不是向我展示Aprobación del Gerente de Distrito
。
知道我哪里出错了吗?
答案 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" />