我创建了自定义@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=""; ....
答案 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被设置为空字符串。