Definiowanie ziarna MessageSource i LocaleResolver w Spring MVC w celu dodania obsługi i18n

Próbuję dodać obsługę i18n do projektu Spring MVC (3.2.0.RELEASE). Mam dwa pakiety poniżej / src / main / resources / bundle:

messageBundle_en.properties
messageBundle_vi.properties

I konfiguracje dla sprężynowych mvc jak poniżej:

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

w powyższych konfiguracjach aplikacja nie działa. Błąd był

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)

Spędziłem wiele godzin porównując z samouczkami dodawania obsługi i18n. Widziałem, że jest tylko jedna różnica: definicje fasoliCookieLocaleResolver iReloadableResourceBundleMessageSource mają atrybuty id. Zmieniłem więc konfiguracje na

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

Teraz działa dobrze!

RobićReloadableResourceBundleMessageSource iCookieLocaleResolver wymagać posiadania identyfikatorów w swoich definicjach?

Dlaczego nieInternalResourceViewResolver potrzebujesz identyfikatora?

Zastanawiam się, czy ktoś może wyjaśnić mi szczegóły.

questionAnswers(1)

yourAnswerToTheQuestion