问题
Appreciate any help as I am lost in getting these things together and JSP does not show spring message as per language which is passed in URL argument. JSP is not getting SessionLocale thru SessionLocaleResolver when different language are selected in welcome.jsp. What am I doing/going wrong.
I am using Spring 3.1.1. Thanks in advance
<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />
<!-- Enables the Spring MVC @Controller programming model -->
<mvc:view-controller path="/views/**" view-name="secure/index" />
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<!-- URL interceptor -->
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
<!-- Application Message Bundle -->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
</bean>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
My WelcomeController
@Controller
public class WelcomeController {
@Autowired
private MessageSource messageSource;
public void setMessageSource(MessageSource messageSource) {
this.messageSource = messageSource;
}
@RequestMapping(value = "/welcome", method = RequestMethod.GET)
public String welcome(Model model, HttpServletRequest request, HttpServletResponse response) {
String lang = request.getParameter("lang");
if (lang == null) {
lang = "en_US";
}
/**
* Get Message having PARAMETERS in the message {0}, {1}.....{n}
*/
model.addAttribute(
"welcome_back_msg",
messageSource.getMessage("message_welcome_back_user", new Object[] { "(USER)",
new DateTime(), new DateTime() }, new Locale(lang)));
return "welcome";
}
}
Message files are placed in /WEB-INF/messages/ messages_en.properties
welcome_springmvc=Welcome to Spring MVC
message_welcome_back_user=Welcome back {0} Your Last Successful : {1} Failed : {2}
messages_zh.properties
welcome_springmvc=\u6B22\u8FCE\u5230 Spring \u7684 MVC
message_welcome_back_user=\u6B22\u8FCE\u56DE\u6765 {0} \u4E0A\u6B21\u6210\u529F : {1} \u5931\u8D25 : {2}
messages_fr.properties
welcome_springmvc=Bienvenue \u00E0 Spring MVC
message_welcome_back_user=Bienvenue \u00E0 nouveau {0} Votre r\u00E9ussite Derni\u00E8re : {1} manqu\u00E9 : {2}
--- welcome.jsp
Spring Message from Property:<b><spring:message code="welcome_springmvc" text="default text" /></b>
Message from Controller:<b>${welcome_back_msg}
JSP Image

You can see Spring Message from Property always fallsback to locale = en. Appreciate any help in this regards.
回答1:
It is not enough to instanciate a LocaleChangeInterceptor Bean. As well as all Interceptors it must be registered as an Interceptor:
So put the bean def within a <mvc:interceptors>
tag:
<!-- URL interceptor -->
<mvc:interceptors>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
</mvc:interceptors>
Btw: have a look at the jsp spring message tag
来源:https://stackoverflow.com/questions/12418645/i18-message-property-does-not-reflect-in-jsp-through-controller