Definieren von MessageSource- und LocaleResolver-Beans in Spring MVC zum Hinzufügen von i18n-Unterstützung

Ich versuche, einem Spring MVC-Projekt (3.2.0.RELEASE) i18n-Unterstützung hinzuzufügen. Ich habe zwei Bundles unter / src / main / resources / bundle:

messageBundle_en.properties
messageBundle_vi.properties

Und die konfigurationen für frühling mvc wie folgt:

<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>

Mit den obigen Konfigurationen funktioniert die Anwendung nicht. Der Fehler war

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)

Ich habe viele Stunden damit verbracht, mich mit Tutorials über das Hinzufügen von i18n-Unterstützung zu vergleichen. Ich habe gesehen, dass es nur einen Unterschied gibt: Bohnendefinitionen vonCookieLocaleResolver undReloadableResourceBundleMessageSource ID-Attribute haben. Also habe ich die Konfigurationen auf geändert

<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>

Jetzt funktioniert es gut!

TunReloadableResourceBundleMessageSource undCookieLocaleResolver Benötigen Sie IDs in ihren Definitionen?

Warum nicht?InternalResourceViewResolver brauche einen Ausweis?

Ich frage mich, ob mir jemand eine ausführliche Erklärung geben kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage