Spring MVC 3 Изменение локали по ссылке не работает - PullRequest
12 голосов
/ 25 мая 2011

Редактировать: My Spring Framework версии 3.0.5

Небольшая проблема здесь, язык не меняется, когда я нажимаю на ссылку смены языка.

Языковые файлы (messages_xx.properties) находятся в каталоге classpath 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, и я получаю арабский текст.

Что здесь может быть не так? В журнале котов тоже ничего нет.

Ответы [ 4 ]

29 голосов
/ 26 мая 2011

Вы должны зарегистрировать localeChangeInterceptor среди перехватчиков MVC для Spring-MVC, чтобы рассмотреть его.Добавьте перехватчик в конфигурацию:

<mvc:interceptors>  
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
              <property name="paramName" value="lang"></property>
        </bean>
</mvc:interceptors>
2 голосов
/ 27 августа 2012

<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>
1 голос
/ 10 февраля 2015

Еще одна вещь, которая может помочь другим:

В моем случае я ДОЛЖЕН добавить в applicationContext.xml. Положив его в пружинный сервлет (см. Диспетчер), не сработало вообще.

0 голосов
/ 27 мая 2018

Вам необходимо зарегистрировать LocaleChangeInterceptor внутри тега mvc interceptors, как показано ниже,

* 1003 Е.Г. *

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

Я получил ту же ошибку, и она работала с использованием этого кода: -)

...