ユーザーが私のホームページへのリンクを最初にクリックしたときに、リンクに ?langId=fr_FR が含まれている場合、ページはフランス語で表示されます。ここまでは順調ですね。ユーザーがログインに失敗すると、ページにフランス語のエラー メッセージが表示されます。これは完璧です。問題は、ログインに 2 回失敗した場合です。この場合、ページの言語はデフォルトで英語に設定されます。
上記のケース (つまり、最初の URL に langId=fr_FR が含まれていた場合の後続のリクエスト) でページをフランス語に保つ方法がわかりません。SessionLocaleResolver の代わりに CookieLocaleResolver を使用する必要がありますか?
このサイトは Spring Security を使用しており、Spring Security フィルターの前に実行されるフィルターを実装しました。このフィルターは、langId 要求パラメーターを使用して LocaleContextHolder を設定します。これは、最初のログイン試行に最適です。他のリクエストが行われた場合、langId パラメータが失われます。
元の langId を保持できるようにする loadByUserName() メソッドでできることはありますか?
リゾルバーとインターセプターの構成は次のとおりです
<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>
編集
SessionLocaleResolver の代わりに CookieLocaleResolver を使用すると、この問題は解決します。しかし、ユーザーが Cookie を無効にすると、振り出しに戻ります。ユーザーが複数回ログインを試みたときにページをフランス語に保つ方法を見つけたいと思います。どんな助けでも本当にありがとうございます!