0

当用户第一次点击指向我主页的链接时,如果该链接包含 ?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,那么我又回到了原点。我想找到一种在用户多次登录尝试时将页面保持为法语的方法。非常感谢任何帮助谢谢!

4

1 回答 1

0

问题正是 sessionlocaleresolver。由于登录尝试失败,每次都会创建一个新会话(我相信)。

这就是 cookielocaleresolver 工作的原因。cookie 已设置并保留在您的域中。

我确实使用了 sessionlocaleresolver 并且还没有考虑过这个问题。

我看到的一种方法应该是在表单操作中包含 locale 参数。这可能是最简单的解决方案?

于 2013-03-28T19:05:38.803 回答