Spring REST API和i18n

时间:2013-08-24 18:30:05

标签: java spring rest spring-mvc internationalization

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

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

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

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

如果我使用lang网址参数,则无效。

如何配置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> 

1 个答案:

答案 0 :(得分:0)

我有两个建议尝试。首先,您确定要调用LocaleChangeInterceptor吗?我见过的大多数配置都为handlerMapping设置了HandlerMapping的ID。另一个建议涉及另一个身份证,即sessionLocaleResolver,我认为它应该是localeResolver。我不确定Spring是否依赖于那些id值或默认的类类型来连接所有这些,但是值得一试。