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 アプリケーションの言語が完全に英語に切り替わります。ただし、これは後続のページにのみ適用されます。現在のページはまだ古い言語で提供されています。
- call
/somePage1
: デフォルトの言語で提供 - call
/somePage2?lang=en
: デフォルトの言語で引き続き提供されます - 電話
/somePage3
:英語で対応
言語の変更がすぐに有効にならないのはなぜですか?