SpringMVC:如何在浏览器中记住站点语言选择



我正在为一个有两种语言的网站使用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应用程序

干杯!

最新更新