当提供'defaultlocale'时,Spring cookie区域设置解析器会忘记选定的区域设置

时间:2014-04-05 13:44:09

标签: java spring localization

我创建了自定义@Controller,用于在Spring 3中阻止语言更改:

 RequestContextUtils.getLocaleResolver( request )
    .setLocale( request , response , [some special-way choosen locale] );

只有在我不在Spring CookieLocaleResolver解析器中设置属性 defaultlocale 时,这对select-request和任何进一步的请求都可以正常工作:

<bean id="localeResolver"
        class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
        <property name="cookieName" value="clientlanguage" />
        <property name="cookieMaxAge" value="60000" />
        <property name="cookiePath" value="/" />
</bean>

问题是我想避免区域设置自动检测,所以我提供默认区域设置:

        <property name="defaultLocale" value="en_EN" />

添加此属性会导致区域设置始终为en_EN ,并且我无法更改它。甚至第一次请求locale-chage控制器也会使用英语包进行渲染。

我在laguage change中查看了HTTP响应,我得到了:

Set-Cookie: clientlanguage=""; ....

3 个答案:

答案 0 :(得分:0)

很好地遵循Spring文档,当您指定默认语言环境时,如果未找到cooki,则使用默认语言环境Spring Doc 所以我想在你做的测试中,没有发送cookie;我建议你使用一个拦截器;你可以检查请求并检查cookie;如果没有找到cookie,您可以使用默认的语言环境;你试过使用拦截器吗?

答案 1 :(得分:0)

使用CookieLocaleResolver的{​​{1}}的各种方法使用它就像这样

defaultLocale

换句话说,如果无法从Cookie中解析出实际的request.setAttribute(LOCALE_REQUEST_ATTRIBUTE_NAME, (locale != null ? locale: determineDefaultLocale(request))); ,它只会使用defaultLocale。这符合javadoc所说的内容

  

设置固定Locale,如果找不到Cookie,此解析程序将返回。

你陈述

  

添加此属性会导致该区域设置始终为en_EN

如果您没有提供Locale的Cookie或者

,那么它只会是en_EN
Locale

使用RequestContextUtils.getLocaleResolver( request ) .setLocale( request , response , [some special-way choosen locale] ); null参数进行调用。

答案 2 :(得分:0)

问题是,我正在设置&#34; pl_PL&#34;语言环境而不仅仅是&#34; pl&#34;。使用&#34; pl_PL&#34; cookie被设置为空字符串。