我遇到了Locale的问题。我试着做一件简单的事情,我可以选择英语或德语。 所以我有两个名为的属性文件 messages_en和 messages_de。 到目前为止,这些文件只有一行:
contactbook = Contact Book
和
contactbook = Adressbuch
分别。
现在在我的JSP视图中我有这个:
<spring:message code="contactbook"/>
我们的想法是视图中的消息会根据我们正在使用的区域设置而改变。现在应该使用以下行更改语言环境:
<a href="?language=en">English</a>|<a href="?language=de">German</a>
如果我删除一切都很好,但当然它不是指定的语言环境。所以其余观点都很好。
在我的dispatcher-servlet.xml文件中,我有:
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
同样,没有它,一切都运作良好。我的理解在这里有些不对劲。 localeChangeInterceptor停止对语言环境所做的任何更改,而ControllerClassNameHandlerMapping会做什么?我继续看着我的控制器,想知道我应该添加一些东西,但在我看来,调度员中的所有这些线应该足够了。
我得到的例外是
No message found under code 'contactbook' for locale 'en'
尽管有无数的例子我仍然没有理解或解决问题。任何帮助将不胜感激。
答案 0 :(得分:2)
您需要配置ReloadableResourceBundleMessageSource。 看看java doc Here。
实施例
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!--classpath of your messages-->
<property name="basename" value="classpath:/i18n/messages" />
<property name="useCodeAsDefaultMessage" value="true" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
答案 1 :(得分:0)
如果您需要JavaConfig SpringMVC应用程序的工作示例,我可以帮助您使用我的代码。我一直在开发相同类型的简单应用程序。这是SpringMVC的配置:
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Bean(name = "viewResolver")
public InternalResourceViewResolver getViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setViewClass(JstlView.class);
resolver.setPrefix("/views/");
resolver.setSuffix(".jsp");
resolver.setContentType("text/html; charset=UTF-8");
return resolver;
}
@Bean(name = "messageSource")
public ReloadableResourceBundleMessageSource getReloadableResourceBundle(){
ReloadableResourceBundleMessageSource resourceBundle = new ReloadableResourceBundleMessageSource();
resourceBundle.setBasename("classpath:messages");
resourceBundle.setDefaultEncoding("UTF-8");
return resourceBundle;
}
@Bean(name = "localeResolver")
public SessionLocaleResolver getSessionLocaleResolver(){
SessionLocaleResolver resolver = new SessionLocaleResolver();
resolver.setDefaultLocale(Locale.ENGLISH);
return resolver;
}
@Bean(name = "localeChangeInterceptor")
public LocaleChangeInterceptor getLocaleChangeInterceptor(){
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("language");
return interceptor;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/css*").addResourceLocations("/resources/css/");
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getLocaleChangeInterceptor());
}
}
此外,如果它无法解决您的问题并且您的配置工作正常,请尝试在消息包中的每个.message文件中的第一条消息之前放置行spacer。 (当我得到同样的例外情况时,它帮了我一次,我不知道为什么,只是说; P)