【发布时间】:2020-12-30 22:27:36
【问题描述】:
我正在学习 Spring 并按照“Spring 4 in action”一书进行锻炼。 我的 jsp 文件中的字符串存在问题,应该从名为 messages.properties 的属性文件中读取该字符串。
我的配置如下:
我正在使用 Maven
我已将属性文件放在以下路径中:
src/main/resources/messages.properties
src/main/resources/messages_it.properties
在 messages.properties 中我定义了以下属性:
spittr.welcome=Welcome to Spittr!
在 messages.properties 中我定义了以下属性:
spittr.welcome=Benvenuto su Spittr!
这就是我在 DispatcherServlet 类中定义 ResourceBundleMessageSource 的方式:
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setFallbackToSystemLocale(false);
messageSource.setBasename("messages");
return messageSource;
}
这是位于路径 src/main/webapp/WEB-INF-views 内的文件 registerForm.jsp
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ page session="false" %>
<html>
<head>
<%@ page isELIgnored="false" %>
<title>Spittr</title>
<link rel="stylesheet" type="text/css" href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1><s:message code="spittr.welcome" /></h1>
</body>
</html>
当页面被渲染时,如果我的浏览器有一个 locale = en,它会给出以下错误:javax.servlet.jsp.JspTagException: No message found under code 'spittr.welcome' for locale 'en_US' .
当语言环境是它(意大利语)时,页面可以正常工作,因此实际读取了属性。
如果我把文件src/main/resources/messages_en.properties,问题就解决了,但是我的问题是:找不到locale的时候不应该使用messages.properties文件吗?强>
我也尝试过 ReloadableResourceBundleMessageSource,但我遇到了同样的问题。
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
我尝试了不同的 ResourceBundleMessageSource/ReloadableResourceBundleMessageSource 选项,但似乎不起作用。
你对我做错了什么有任何想法吗?如果您需要更多信息,请告诉我。
提前感谢您的宝贵时间。
【问题讨论】:
标签: java spring jsp internationalization resources