2

Web アプリケーションのユーザーが現在の言語を変更できるようにしたい ( i18nの目的で)。これは、言語コードを HTTP GET パラメータ (例: /somePage?lang=en) として URL に追加することによって行われます。言語コードは、対応するコントローラ メソッドで解決され、 を介して設定され.withLang(lang)ます。

この機能を提供し、ボイラープレート コードを回避するために、アクション構成を使用しています。

def withLang(f: => Request[AnyContent] => Result) = Action { implicit request =>
  request.getQueryString("lang").flatMap(Lang.get(_)) match {
    case Some(lang) => f(request).withLang(lang)
    case None       => f(request)
  }
}

構成は、次のように使用できます。

def somePage = withLang { implicit request =>
  //do some stuff
  Ok(views.html.somePage())
}

このソリューションは正常に機能します。を呼び出すと/somePage?lang=en、Web アプリケーションの言語が完全に英語に切り替わります。ただし、これは後続のページにのみ適用されます。現在のページはまだ古い言語で提供されています。

  1. call /somePage1: デフォルトの言語で提供
  2. call /somePage2?lang=en: デフォルトの言語で引き続き提供されます
  3. 電話/somePage3:英語で対応

言語の変更がすぐに有効にならないのはなぜですか?

4

1 に答える 1

4

Redirectページを直接レンダリングする代わりに、を使用して解決しました。

def withLang(f: => Request[AnyContent] => Result) = Action { implicit request =>
  val referrer = request.headers.get(REFERER).getOrElse("/")
  request.getQueryString("lang").flatMap(Lang.get(_)) match {
    case Some(lang) => Redirect(referrer).withLang(lang)
    case None       => f(request)
  }
}
于 2013-07-21T10:46:31.463 に答える