2
我想允許我的Web應用程序的用戶更改當前語言(用於i18n的用途)。這是通過將語言代碼作爲HTTP GET參數附加到URL來完成的(例如/somePage?lang=en
)。語言代碼然後在相應的控制器方法中解析並通過.withLang(lang)
進行設置。玩!框架的.withLang(...)不立即生效
我使用action composition來提供該功能,避免樣板代碼:
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應用程序的語言將永久切換爲英文。但是,這僅適用於後續頁面。當前頁面仍然是服務於舊的語言:
- 呼叫
/somePage1
:在默認語言服務 - 呼叫
/somePage2?lang=en
:在默認語言仍擔任 - 呼叫
/somePage3
:英語
服務爲什麼語言更改不會立即生效?
這同樣適用於閃存的cookie。 –