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