2016-08-06 3 views
1

私は伝統的なSpring4/Thymeleafの国際化アプリケーション を持っている私は、古典的な春Thymeleaf:Iを切り替えるとき変更ロケールと現在のページにとどまる

org.springframework.web.servlet.i18n.LocaleChangeInterceptor 

org.springframework.web.servlet.i18n.CookieLocaleResolver 

で簡単にロケールを切り替えますサーバに常に/home?lang = frを送信してください。それはうまく動作します。しかし、私はより複雑な行動が必要です。 私がする必要があるのは、現在のページを維持しながら、ロケールの切り替え中にに保存することです。

私はこの thymeleafスニペットで半分ワーキング解決策を見つけた:問題は、私は自分自身に多くのコーナーケースを実装する必要がある

th:with="currentUrl=(${#httpServletRequest.pathInfo + '?' + #strings.defaultString(#httpServletRequest.queryString, '')}) 

  • 任意のクエリパラメータが既に存在する場合
  • lang = en param、
  • など

誰もがネイティブ春やThymeleafツールでこのケースを管理する方法を知っていますか?または、私はThymeleaf用に独自のプロセッサを作成する必要がありますか?

+0

あなたがテストしているサンプルアプリケーションを持っていますかこの機能はありますか?解決策を試してみるために、既に設定されているプロジェクトに対して作業することができればいいですか?言語セレクタが各ページのヘッダーまたはフッターとして表示されていることを推測しています。私は、現在のページのURLを含むモデルに値を追加するインターセプタを設定することにします。テンプレートは、ページの言語固有のURLを出力する役割を担います。 –

答えて

0

私はこれを私のプロジェクトで使っています&うまく動作します。私はロケールが変更されたときに特にURLにリダイレクトしません。

@Bean 
public LocaleResolver localeResolver() 
{ 
    Locale defaultLocale = new Locale(env.getProperty(Constants.DEFAULT_LOCALE)); 
    CookieLocaleResolver clr = new CookieLocaleResolver(); 
    clr.setDefaultLocale(defaultLocale); 
    return clr; 
} 

@Bean 
public LocaleChangeInterceptor localeChangeInterceptor() 
{ 
    LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); 
    lci.setParamName("lang"); 
    return lci; 
} 
+0

ロケールが変更された場合、ユーザーは同じページに留まる必要があります。あなたのコードは適切ではありません。 – Yev

+0

どのようにロケールを変更しますか? 'lang'クエリパラメータを使用していませんか? – nmy

+0

私は古典的なアプローチを使っていますが、私の質問はlang paramを使って現在のページリンクを動的に生成する方法です。 – Yev

1

最も簡単な解決策は、「requestURI」と「queryString」を連結することです。 この方法の欠点は、同じリンクで複数回クリックすると、パラメータが繰り返し追加されるということです。

この問題を回避するには、この質問を見て、コード例についてはパラメータ

を追加する前に、URLを「きれい」という関数を記述することです:Thymeleaf: add parameter to current url

+0

ありがとうございました。ただ1つの精度 - 参照されたServletUriComponentsBuilder.fromCurrentRequest()。replaceQueryParam(param).build()。toUriString();で**ビルド(**)関数呼び出しを忘れてしまいました。 – Yev

+0

@Yevでは、ドキュメントに従って[toUriString()](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/util)のbuild()メソッド呼び出しが存在しません。/UriComponentsBuilder。html#toUriString--) 'は、build()、次にUriComponents.encode()、最後にUriComponents.toUriString()への呼び出しを組み合わせたショートカットメソッドです。 –

関連する問題