资源包在 form:input 标记的占位符中错误地显示 utf-8 字符
Resource bundle display incorrectly utf-8 characters in Placeholder of form:input tag
在我的项目中,我使用 Resorce bundle 来显示多语言,一切正常,只是无法在占位符中显示值:
<label>
<spring:message code="home.address"/>
</label>
<spring:message code="home.street" var="bdstreet"/>
<form:input id="txtstreet" class="form-control" path="address.street" placeholder="${bdstreet}" />
<form:errors path="address.street" cssClass="error" />
英语显示正常,但越南语不正确。
我的配置:
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>language/home</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<beans:bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="lang" />
</beans:bean>
</mvc:interceptor>
</mvc:interceptors>
<beans:bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<beans:property name="cookieName" value="lang" />
<beans:property name="defaultLocale" value="vn_VN" />
</beans:bean>
<!-- End Resource Bundle -->
尝试在 ResourceBundleMessageSource
声明中添加 defaultEncoding
属性:
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>language/home</beans:value>
</beans:list>
</beans:property>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
此外,检查您的文件是否以 utf-8
编码存储。
关于占位符。看起来,您以编码状态存储字符串。这意味着当您在 html 中显示它时,浏览器将自动解码字符串。但是当您将其显示在占位符中时,浏览器将不执行任何操作,并按原样显示它们。解决方案,不要在您的资源中对字符串进行编码。只需键入包含常用字母的字符串。示例:
simple.string=Quốc Gia // now you store in this format
simple.string=Quốc Gia // you should store in this format
是的,我发现了我的问题。
我刚刚更改了 BunderResource 插件来格式化我的属性文件。现在可以使用了。
(我之前用unikey和"NCR Decimal",占位符位置显示不正确)
我用 BunderResource 插件重新创建了属性文件:
那个插件会为我重新格式化。
结果是:
@Ken Bekov,谢谢你的帮助:)
我用它:
Java properties UTF-8 encoding in Eclipse
在我的项目中,我使用 Resorce bundle 来显示多语言,一切正常,只是无法在占位符中显示值:
<label>
<spring:message code="home.address"/>
</label>
<spring:message code="home.street" var="bdstreet"/>
<form:input id="txtstreet" class="form-control" path="address.street" placeholder="${bdstreet}" />
<form:errors path="address.street" cssClass="error" />
英语显示正常,但越南语不正确。 我的配置:
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>language/home</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<beans:bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="lang" />
</beans:bean>
</mvc:interceptor>
</mvc:interceptors>
<beans:bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<beans:property name="cookieName" value="lang" />
<beans:property name="defaultLocale" value="vn_VN" />
</beans:bean>
<!-- End Resource Bundle -->
尝试在 ResourceBundleMessageSource
声明中添加 defaultEncoding
属性:
<beans:bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<beans:property name="basenames">
<beans:list>
<beans:value>language/home</beans:value>
</beans:list>
</beans:property>
<beans:property name="defaultEncoding" value="UTF-8"/>
</beans:bean>
此外,检查您的文件是否以 utf-8
编码存储。
关于占位符。看起来,您以编码状态存储字符串。这意味着当您在 html 中显示它时,浏览器将自动解码字符串。但是当您将其显示在占位符中时,浏览器将不执行任何操作,并按原样显示它们。解决方案,不要在您的资源中对字符串进行编码。只需键入包含常用字母的字符串。示例:
simple.string=Quốc Gia // now you store in this format
simple.string=Quốc Gia // you should store in this format
是的,我发现了我的问题。
我刚刚更改了 BunderResource 插件来格式化我的属性文件。现在可以使用了。
(我之前用unikey和"NCR Decimal",占位符位置显示不正确)
我用 BunderResource 插件重新创建了属性文件:
那个插件会为我重新格式化。