2

在我的 REST API 中,我想允许用户使用lang参数设置语言环境,即

http://somehost/resource?param1=value1&lang=fr

如果langURL 中不存在该参数,Accept-Language则应使用标头并将其设置为区域设置。

我在我的 REST API 中使用 Spring 的 i18n 功能。我查看了文档并配置了必要的 bean。如果我发送带有Accept-Language标头的请求,它似乎可以正常工作,当我调用LocaleContextHolder.getLocale()它时,它会返回我在标头中设置的语言环境。

如果我使用langURL 参数它不起作用。

如何配置 Spring 也使用 locale 参数?

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

<bean     
 class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
    <property name="interceptors">
        <list>
            <ref bean="localeInterceptor" />
        </list>
    </property>
</bean>

<bean id="sessionLocaleResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>

<bean id="messages" class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basenames">
        <list>
            <value>messages</value>
        </list>
    </property>
</bean> 
4

1 回答 1

1

我有两个建议可以尝试。首先,你确定LocaleChangeInterceptor被调用了吗?我见过的大多数配置都有handlerMapping一个HandlerMapping. 另一个建议是关于另一个id,即sessionLocaleResolver,我认为应该是localeResolver。我不确定 Spring 默认是否依赖这些 id 值或类类型来将所有这些连接在一起,但值得一试。

于 2013-08-26T03:15:23.960 回答