Finally, I solved this problem as follows.
As @Infinity points out, I defined the wrapped request and action as:
case class LocalizedRequest(messages: Messages, request: Request[AnyContent]) extends WrappedRequest(request) object Actions { def LocalizedAction(lang: String)(f: LocalizedRequest => Result) = { Action { request => f(LocalizedRequest(applicationMessages(Lang(lang), current), request)) } } object Implicits { implicit def localizedRequest2Messages(implicit request: LocalizedRequest): Messages = request.messages } }
Now I can use LocalizedAction as follows:
def lang(lang: String) = LocalizedAction(lang) { implicit request => Ok(views.html.index("play")) }
However, to omit the implicit Messages parameter, which should be play.api.i18n.Messages , I added a line to my template as:
@import controllers.Actions.Implicits._
source share