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")