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.