Spring MVC:如何在浏览器中记住网站语言选择?

时间:2015-11-21 02:28:35

标签: spring-mvc

我将Spring MVC用于两种语言的网站:英文和中文。

我在Spring上下文中有以下内容

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" />
</bean>

如果我通过HTML界面中的下拉列表选择其他语言,我可以看到网站的语言发生了变化。

假设我的语言是中文,我正在查看该网站。我关闭了浏览器。然后我再次打开浏览器,输入网址的URL,网址中没有lang参数。

问题在于:Chrome能够记住浏览器关闭时的语言,并在打开新的浏览器窗口时使用该语言。这是我想要的行为。但是,Firefox没有。当我打开它并输入网站网址时,它始终以网站的默认语言显示网站(在这种情况下为英文)。

如何让Firefox(或其他浏览器)使用关闭时使用的语言打开网站?

谢谢!

2 个答案:

答案 0 :(得分:1)

您还需要添加SessionLocaleResolver。

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
   <property name="defaultLocale" value="en" />
</bean>

如果你不添加它,那么我非常确定默认行为是使用AcceptHeaderLocaleResolver,它通过检查HTTP请求中的accept-language标头来解析语言环境。这意味着您的浏览器将做出决定,使用您的语言首选项并在接受标题中发送语言选择。

如果您的应用程序是无状态的,那么您可能需要使用CookieLocaleResolver代替。

答案 1 :(得分:1)

经过研究,我发现了解决方案。我需要以这种方式设置区域设置解析器:

<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中测试过它,效果很好。这个帖子有信用:

When I used CookieLocaleResolver, I can set invalid cookie to crash spring web application

干杯!