我将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(或其他浏览器)使用关闭时使用的语言打开网站?
谢谢!
答案 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
干杯!