大家好我正在使用spring mcv进行国际化。但我无法进行语言变更。请帮忙。这是我的servlet.xml
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="classpath:messages" />
<!-- <property name="defaultEncoding" value="UTF-8" /> -->
</bean>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
这是语言选择菜单:
<span style="float: right">
<a href="?language=en">en</a> |
<a href="?language=ge">ge</a> |
<a href="?language=it">it</a>
</span>
请帮我解决语言选择问题 为什么不对我工作?请提供建议。
新编辑的Servlet.xml
- &GT;
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="language" />
</bean>
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
答案 0 :(得分:0)
一切事,
请使用ReloadableResourceBundleMessageSource
代替ResourceBundleMessageSource
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource ">
<property name="basename" value="/WEB-INF/messages"></property>
</bean>
然后你必须将资源包文件从当前的src / main / resources移动到你的WEB-INF。
还可根据您的要求添加相关捆绑包,例如
您的WEB-INF中的messages_en,messages_gt,messages_it。
编辑:
我还怀疑你需要关注,
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<ref bean="localeChangeInterceptor" />
</property>
</bean>
而不是,
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
<property name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
这是因为在更改语言时您没有调用任何Controller映射。因此它不会被拦截器拦截,你的语言也不会被改变。
答案 1 :(得分:0)
注册 SessionLocaleResolver
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
注册&#34; LocaleChangeInterceptor &#34;拦截器,并调用它 到需要支持这些语言的处理程序映射
<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>
而且(这是你错过的)
<!-- Register the messages_.properties -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="messages" /><!-- value="messages" as the prefix is messages_.properties -->
</bean>
此外,它并非神奇地翻译您仍然需要引用 .properties 文件中的文字的页面上的任何文字,因为它们是那些将被翻译:
例如:
messages_en.properties
包含:
messages.text = My name
messages_ge.properties
包含
messages.text = Ich heise
然后在目标页面上输出此文本
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
...
...
<h3> your message : <spring:message code="messages.text" text="default text" /> </h3>