Scala Play Framework如何为当前请求设置语言?(Scala Play Framework how to set language for current request?)

编程入门 行业动态 更新时间:2024-10-19 18:37:31
Scala Play Framework如何为当前请求设置语言?(Scala Play Framework how to set language for current request?)

我知道可以将更好的语言设置为与代码进行会话

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

I know it is possible to set preferable language to session with code

Ok(views.html.index()).withLang(lang)

But it will work only on next request and on the current request user get page in default language. I've tried make it possible like this:

implicit val lang = Lang("de") Ok(views.html.index("Homepage"))

without success. What is a correct way to achieve this? Here is the view:

@(message: String)(implicit messages: Messages) @main(message) { @messages("admin.area.enter") }

最满意答案

有关国际化的Play 2.4文档说明

“此外,Play知道如何注入MessagesApi值(使用DefaultMessagesApi实现),因此您只需使用@ javax.inject.Inject注释注释您的控制器,然后让Play自动为您组合连接。”

像这样的东西

控制器:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { def index() = Action { implicit request => Ok(views.html.index()) } }

模板:

@()(implicit messages: Messages, lang: Lang) Messages says @messages("hello.msg")

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

Play 2.4和Scala 2.11.6中的语言选择器

下面是一个复合动作的示例,它修改了请求标头。

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()) } }

视图:

@()(implicit messages: Messages, lang: Lang) @messages("foo.bar")

The Play 2.4 documentation on internationalization states

"Also, Play knows out of the box how to inject a MessagesApi value (that uses the DefaultMessagesApi implementation), so you can just annotate your controller with the @javax.inject.Inject annotation and let Play automatically wire the components for you."

Something like this

Controller:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { def index() = Action { implicit request => Ok(views.html.index()) } }

Template:

@()(implicit messages: Messages, lang: Lang) Messages says @messages("hello.msg")

If you wish to implement a language picker component then this answer might help

Language selector in Play 2.4 & Scala 2.11.6

Here is an example with a composite action which modifies the request header.

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

Controller:

class FooController @Inject() (val messagesApi: MessagesApi) extends Controller with I18nSupport { def index() = LanguageAction { implicit request => Ok(views.html.index()) } }

View:

@()(implicit messages: Messages, lang: Lang) @messages("foo.bar")

更多推荐

本文发布于:2023-08-01 12:15:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1358034.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:何为   语言   Play   Framework   Scala

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!