我正在为一个有两种语言的网站使用SpringMVC:英语和中文。
我在Spring上下文中有以下内容
<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="lang" />
</bean>
如果我通过HTML界面中的下拉菜单选择另一种语言,我可以看到网站的语言发生了变化。
假设我正在查看该网站,而它的语言是中文。我关闭浏览器。然后我再次打开浏览器,输入网站的url,url中没有lang参数。
问题是:Chrome能够记住浏览器关闭时的语言,并在打开新浏览器窗口时使用该语言。这是我想要的行为。然而,Firefox却没有。当我打开它并输入网站url时,它总是以网站的默认语言(本例中为英语)显示网站。
如何让Firefox(或其他浏览器)使用关闭时使用的语言打开网站?
谢谢!
您还需要添加一个SessionLocaleResolver。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
<property name="defaultLocale" value="en" />
</bean>
如果您不添加此项,那么我确信默认行为是将使用AcceptHeaderLocaleResolver,它通过检查HTTP请求中的accept语言标头来解析区域设置。这意味着您的浏览器将做出决定,使用您的语言首选项,并在接受标头中发送语言选择。
如果您的应用程序是无状态的,那么您可能需要使用CookieLocaleResolver。
经过研究,我找到了解决方案。我需要这样设置区域设置解析器:
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<property name="defaultLocale" value="en" />
<property name="cookieName" value="clientLang" />
<property name="cookieMaxAge" value="31556926" />
</bean>
换言之,我需要通过设置cookieMaxAge的值,让它在一段时间内保持活力。我在Firefox和Safari中进行了测试,效果很好。这个线程有信用:
当我使用CookieLocaleResolver时,我可以设置无效的cookie来崩溃spring web应用程序
干杯!