Scala Play Framework如何为当前请求设置语言?

Scala Play Framework如何为当前请求设置语言?,scala,playframework,Scala,Playframework,我知道可以将首选语言设置为带有代码的会话 Ok(views.html.index()).withLang(lang) 但它将只在下一个请求和当前请求中使用默认语言的“用户获取”页面。 我已经尝试过这样做: implicit val lang = Lang("de") Ok(views.html.index("Homepage")) 没有成功。 实现这一目标的正确方法是什么? 以下是视图: @(message: String)(implicit messages: Messages) @ma

我知道可以将首选语言设置为带有代码的会话

Ok(views.html.index()).withLang(lang)
但它将只在下一个请求和当前请求中使用默认语言的“用户获取”页面。 我已经尝试过这样做:

implicit val lang = Lang("de")
Ok(views.html.index("Homepage"))
没有成功。 实现这一目标的正确方法是什么? 以下是视图:

@(message: String)(implicit messages: Messages)

@main(message) {
    @messages("admin.area.enter")
}
美国

“此外,Play知道如何注入MessagesApi值(使用DefaultMessagesApi实现),因此您可以使用@javax.inject.inject注释控制器,并让Play自动为您连接组件。”

像这样的

控制器:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {

  def index() = LanguageAction { implicit request =>

    Ok(views.html.index())
  }

}
模板:

如果您希望实现一个语言选择器组件,那么这个答案可能会有所帮助

下面是一个修改请求头的复合操作示例

object LanguageAction extends ActionBuilder[Request] {
  def invokeBlock[A](request: Request[A], block: (Request[A]) => Future[Result]) = {

  val newRequest = new WrappedRequest[A](request) {
      //calculate from request url
      val lang = Lang("fr")

      override lazy val acceptLanguages = Seq(lang)
    }

    block(newRequest)
  }
}
控制器:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {

  def index() = LanguageAction { implicit request =>

    Ok(views.html.index())
  }

}
视图:


我想你回答错问题了。这可能是对这个问题的编辑。编辑这个和删除另一个很容易。
class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport {

  def index() = LanguageAction { implicit request =>

    Ok(views.html.index())
  }

}
@()(implicit messages: Messages, lang: Lang)

@messages("foo.bar")