我在三个属性文件中声明了三个语言环境转换,如Strings.properties,Strings_es_ES.properties和Strings_en_GB.properties(适用于美国,ES和英国)
在Strings_es_ES.properties中,我声明了如下所示的字符串,并使用UTF-8格式设置属性文件。
admin.main.numberofrewards=Número de recompensas:
admin.main.categorylist=lista Categoría
我在.jsp文件中使用上面的资源包,如下所示
<%@ page pageEncoding="UTF-8"%>
<h2><spring:message code="admin.main.numberofrewards"/></h2>
<p><spring:message code="admin.main.categorylist"/></p>
我在浏览器上输出如下
Nómero de recompensas
lista CategorÃa
请帮我解决这个问题
答案 0 :(得分:9)
并使用UTF-8格式设置属性文件
你的错误。
它们read为ISO-8859-1,因此它们应保存为ISO-8859-1。如果您打算提供ISO-8859-1 character set无法提供的字符,那么您基本上有3个选项:
使用native2ascii
工具将UTF-8保存的属性文件转换为ISO-8859-1编码的属性文件,其中包含\uXXXX
形式的unicode转义,而不是那些“特殊字符“ISO-8859-1字符集未涵盖。
使用能够自动执行#1的属性文件编辑器,例如Eclipse中内置的编辑器。换句话说,只需在Eclipse中创建和编辑属性文件即可。它会自动担心编码问题。
使用自定义ResourceBundle.Control
实现,您可以使用new InputStreamReader(inputStream, "UTF-8")
自行显式读取属性文件。但是,作为非Spring用户,我不知道如何告诉Spring使用该自定义Control
。 In JSF it's easy
答案 1 :(得分:1)
如果你的属性文件看起来像这个Descripción de artículos
,但是你在前端Descripción de artÃculos
得到了这个,那么问题是用于读取属性文件的编码,这是你怎么知道的Spring始终使用UTF-8:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
@Configuration
public class MessageConfiguration {
@Bean
public ReloadableResourceBundleMessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding("UTF-8");
// other config options go here if needed, e.g. path to the property bundle
return messageSource;
}
}