我想允许我的 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
:用英语服务
为什么语言更改没有立即生效?