Definindo os beans MessageSource e LocaleResolver no Spring MVC para adicionar suporte ao i18n

Eu estou tentando adicionar suporte a i18n para um projeto Spring MVC (3.2.0.RELEASE). Eu tenho dois pacotes abaixo de / src / main / resources / bundle:

messageBundle_en.properties
messageBundle_vi.properties

E as configurações para a mola mvc como abaixo:

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="cache" value="false" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

<bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:bundle/messageBundle" />
</bean>
<bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="vi" />
</bean>
<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>

com configurações acima, o aplicativo não está funcionando. O erro foi

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspTagException: No message found under code 'message.home.header.welcome' for locale 'en_US'.
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238)

Passei muitas horas comparando com tutoriais de adicionar suporte ao i18n. Eu vi que há apenas uma diferença: definições deCookieLocaleResolver eReloadableResourceBundleMessageSource tem atributos id. Então eu mudei as configurações para

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <property name="basename" value="classpath:bundle/messageBundle" />
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="vi" />
</bean>

Agora está funcionando bem!

FazReloadableResourceBundleMessageSource eCookieLocaleResolver requerer ter ids em suas definições?

Por que nãoInternalResourceViewResolver precisa de um id?

Imaginando se alguém pode me dar uma explicação em detalhes.

questionAnswers(1)

yourAnswerToTheQuestion