i18 message property does not reflect in JSP through Controller

我的未来我决定 提交于 2019-12-12 02:36:16

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!