国际化问题

时间:2016-12-26 07:36:26

标签: java spring spring-mvc internationalization

大家好我正在使用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>

这是我的文件目录结构: enter image description here

这是语言选择菜单:

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

2 个答案:

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