当用户第一次点击指向我主页的链接时,如果该链接包含 ?langId=fr_FR,则页面以法语显示;到目前为止,一切都很好。如果用户尝试登录失败,页面会以法语显示错误信息,非常完美。问题是如果第二次尝试登录失败。在这种情况下,页面语言默认为英语。
对于上述情况,我不确定如何将页面保留为法语(即初始 url 包含 langId=fr_FR 时的任何后续请求)。我应该使用 CookieLocaleResolver 而不是 SessionLocaleResolver?
该站点使用 Spring Security,我实现了一个在 Spring Security 过滤器之前运行的过滤器。此过滤器将使用 langId 请求参数设置 LocaleContextHolder。这对于初始登录尝试非常有用。提出的任何其他请求,我都会丢失 langId 参数。
我可以在 loadByUserName() 方法中做些什么来让我保留原始的 langId?
这是解析器和拦截器的配置
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" >
<property name="defaultLocale" value="en" />
</bean>
<mvc:interceptors>
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="langId" />
</bean>
</mvc:interceptors>
编辑
使用 CookieLocaleResolver 而不是 SessionLocaleResolver 确实可以解决此问题。但是,如果用户禁用 cookie,那么我又回到了原点。我想找到一种在用户多次登录尝试时将页面保持为法语的方法。非常感谢任何帮助谢谢!