0

Spring MVC プロジェクトに i18n をセットアップしました。リンクをクリックしても言語が変わらない:

<a href="?lang=hi">Hindi</a>
<a href="?lang=en">English</a>

controller-servlet.xml

    <mvc:annotation-driven/> 
    <context:component-scan base-package="com.avvas.search.controller" />

    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basename" value="classpath:resources/messages" />
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="cacheSeconds" value="0" />
    </bean>

    <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.CookieLocaleResolver">
        <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>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/javascript/**" location="/javascript/" />

ローカル変更リンク:

<a href="?lang=hi">Hindi</a>
<a href="?lang=en">English</a>

問題は、ヒンディー語をクリックするとページがヒンディー語で表示され、言語が変更されないことです。ただし、デフォルトの言語をヒンディー語に変更<property name="defaultLocale" value="hi"/>すると、ローカルはヒンディー語として使用されますが、英語のローカル変更リンクをクリックすると、ローカルは変更されません。

4

2 に答える 2

2

<mvc:annotation-driven/>は独自のハンドラー マッピング ( RequestMappingHandlerMapping) を登録しており、インターセプター構成はそれに適用されません。

次のようにインターセプターを定義します。

<mvc:interceptors>
    <bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
        <property name="paramName" value="lang" />
    </bean>
</mvc:interceptors>
于 2013-06-26T12:37:29.657 に答える
0

これが完全なコードです。基本的に、インターセプターを明示的に登録する必要があります。

<bean id="localeChangeInterceptor"
    class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
    <property name="paramName" value="lang" />

上記のxmlでは、「localeChangeInterceptor」を指定しましたが、デフォルトですべてのリクエストをインターセプトする必要があることについてはどこにも言及していません。

そのため、Spring はすべての Bean をロードしますが、どのリクエストをインターセプトするかを定義するまで、または定義しない限り、インターセプターとして登録しません。

以下の例では、mvc インターセプターで定義し、リクエストを処理する前にそのインターセプターを参照する必要があることをフレームワークに伝えています。

    <mvc:interceptor>
        <mvc:mapping path="/**/**/" />
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
            <property name="paramName" value="locale" />
        </bean>
    </mvc:interceptor>
</mvc:interceptors>
于 2013-11-28T06:50:52.550 に答える