Java 国际化问题

Java 国际化问题,java,spring,spring-mvc,internationalization,Java,Spring,Spring Mvc,Internationalization,大家好,我正在使用spring mcv进行国际化工作。但是我不能改变语言。请帮忙。这是我的servlet.xml <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="classpath:messages" /> <!-- <pro

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

这是我的文件目录结构:

这是语言选择菜单:


|
|
两件事

请使用
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中添加信息

编辑:

我还怀疑你需要跟进

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

这是因为在更改语言时,您没有调用任何控制器映射。因此,它不会被拦截器截获,您的语言也不会改变。

注册SessionLocalerResolver

消息\u 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>

...
...
您的留言:

giving me-HTTP状态500-请求处理失败;嵌套异常是错误的,如果您在src/main/resources中添加属性文件,或者在WEB-INF中添加属性文件,则不会有任何区别。如果我将“it”设为默认值,那么它的工作方式将与“en”相同。但它现在不是迭代的,我只想解决这个问题。@DhruvGurjar您可以更新您的问题并展示您根据建议所做的一切吗。我改变了你关于“ReloadableSourceBundleMessageSource”的建议,但是如果我将属性移动到WEB-INF,或者如果它位于src/java/resource,则两者都可以正常工作。但基于语言参数的不工作,它仍然考虑“en”属性,这是默认属性。但不是意大利语或德语。首先告诉我你是否按照建议和尝试使用了WEB-INF?你有多少个消息文件?我要你有4个。一个messages.properties,messages_en.properties和2个其他。谢谢你的回答,但它对我不起作用。还有我注册的消息源属性,但有一些错误,所以它没有显示在代码中。我尝试了很多网站这样做,但它仍然不工作为什么?
<!-- 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>
messages.text = My name
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>