如何在播放框架动作中获取当前语言?
Posted
技术标签:
【中文标题】如何在播放框架动作中获取当前语言?【英文标题】:How to get current language in a play framework action? 【发布时间】:2015-08-19 11:17:55 【问题描述】:我正在将一个 Play 2.4 项目从 Java 迁移到 Scala。
在 Java 中,我可以使用lang().code()
来获取当前语言。
如何在 Scala 中做同样的事情?
【问题讨论】:
playframework.com/documentation/2.3.x/ScalaI18N 我当然阅读了文档,但我找不到获取当前请求语言的方法。 该文档展示了如何从Request
中获取acceptLanguages
字段。 play.api.i18N
中的 Lang
对象允许您访问默认和可用的语言。
好的,谢谢。也许我应该描述我的整个问题。基本上,我希望能够通过客户端的按钮选择语言。我在 Java 中使用 changeLang() 来修改所选语言。然后在其他请求中,我使用 lang().code() 检索当前语言。在 Scala 中如何实现类似的操作?
【参考方案1】:
您需要一个MessagesApi
(文档:Java 和Scala)来调用prefered(RequestHeader req)
方法,该方法返回用户的当前语言。
它使用这个算法来找到最合适的语言:
def preferred(request: RequestHeader) =
val maybeLangFromCookie = request.cookies.get(langCookieName).flatMap(c => Lang.get(c.value))
// match selected lang with play.i18n.langs or return the default one
val lang = langs.preferred(maybeLangFromCookie.toSeq ++ request.acceptLanguages)
Messages(lang, this)
我不使用Java API,但我认为您可以使用DI注入器获取messageApi实例:
@Inject MessagesApi messagesApi
【讨论】:
以上是关于如何在播放框架动作中获取当前语言?的主要内容,如果未能解决你的问题,请参考以下文章
如何在播放时在标签中获取 AVAudioplayer 中的当前时间