我試圖給Spring MVC項目(3.2.0.RELEASE)添加i18n支持。我具有低於/ SRC /主/資源/束兩束:在Spring MVC中定義MessageSource和LocaleResolver bean以添加i18n支持
messageBundle_en.properties
messageBundle_vi.properties
而對於如下彈簧MVC配置:
<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>
與應用程序不工作以上配置。錯誤是
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)
我花了很多時間與教程添加國際化支持相比。我看到只有一個區別:CookieLocaleResolver
和ReloadableResourceBundleMessageSource
的bean定義具有id屬性。所以我改變了配置爲
<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>
現在它工作的很好!
是否ReloadableResourceBundleMessageSource
和CookieLocaleResolver
要求在其定義中具有ID?爲什麼InternalResourceViewResolver
不需要一個ID?
想知道是否有人可以給我一個詳細的解釋。
同樣計數messageSource。Spring按名稱獲取它 –
@MartinFrey感謝Martin,更新messageSource的答案 – Hippoom
'messageSource'在'AbstractApplicationContext.java'中初始化, –