12

编辑:我的 Spring 框架版本 3.0.5

这里有一个小问题,当我点击语言转换器链接时,语言没有改变。

语言文件(messages_xx.properties)位于类路径 i18n 目录中。这些文件是:

i18n/messages_en.properties
i18n/messages_ar.properties

弹簧配置

<!-- Component scanner. This is used to automatically find Spring annotations like @Service and @Repository -->
    <context:component-scan base-package="com.keype" />

    <!-- Annotation driven programming model -->
    <mvc:annotation-driven />   
    <context:annotation-config />
    <mvc:resources mapping="/static/**" location="/static/" />


    <!-- Session Object Configuration -->
    <bean id="session" class="com.keype.system.Session" scope="session">
        <aop:scoped-proxy />
    </bean>

    <!-- The View Resolver -->
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp"
          />

    <!-- i18n Configuration. Default language is english. Change language using ?language=en -->
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
        <property name="defaultLocale" value="en" />
    </bean>

    <!-- Message text files. This is set UTF-8 to display Arabic UTF correctly. -->    
    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:i18n/messages" />
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

JSP 代码中的一段

<a href="?lang=ar"><spring:message code="header.arabic" /></a> | 
    <a href="?lang=en"><spring:message code="header.english" /></a> 

问题是,当我单击上面的链接更改语言时,区域设置更改功能不起作用。我通过将“defaultLocate”更改为“ar”进行了测试,我得到了阿拉伯语文本。

这里可能有什么问题?tomcat 日志中也没有任何内容。

4

4 回答 4

29

您必须在 MVC 拦截器中注册localeChangeInterceptor以便 Spring-MVC 考虑它。将拦截器添加到配置中:

<mvc:interceptors>  
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
              <property name="paramName" value="lang"></property>
        </bean>
</mvc:interceptors>
于 2011-05-25T21:15:51.443 回答
2

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"
        p:paramName="lang" />
</mvc:interceptors>

<bean id="localeResolver"
    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
    <property name="defaultLocale" value="en" />
</bean>
于 2012-08-27T18:07:07.727 回答
1

另一件可以帮助他人的事情:

就我而言,我必须添加 applicationContext.xml。将其放入 spring-servlet(参考调度程序)中,根本不起作用。

于 2015-02-10T18:24:52.107 回答
0

您需要在 mvc 拦截器标签中注册 LocaleChangeInterceptor ,如下所示,

例如

<mvc:interceptors>
    <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <property name="paramName" value="siteLanguage" />
    </bean>
</mvc:interceptors>

我遇到了同样的错误,并且使用此代码可以正常工作:-)

于 2018-05-27T13:30:22.217 回答