0

ユーザーが私のホームページへのリンクを最初にクリックしたときに、リンクに ?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 を無効にすると、振り出しに戻ります。ユーザーが複数回ログインを試みたときにページをフランス語に保つ方法を見つけたいと思います。どんな助けでも本当にありがとうございます!

4

1 に答える 1

0

問題はまさに sessionlocaleresolver です。ログイン試行が失敗するため、毎回新しいセッションが作成されます (私は信じています)。

それが cookielocaleresolver が機能している理由です。Cookie が設定され、ドメインに残ります。

私は sessionlocaleresolver を使用していますが、この問題についてはまだ考えていません。

私が見る 1 つの方法は、フォーム アクションに locale パラメータを含めることです。それはおそらく最も簡単な解決策ですか?

于 2013-03-28T19:05:38.803 に答える