如何在播放框架动作中获取当前语言?

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

【讨论】:

以上是关于如何在播放框架动作中获取当前语言?的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC3 中,如何获取当前的动作名称?

如何在 video.js 中获取当前播放时间

如何在播放时在标签中获取 AVAudioplayer 中的当前时间

如何在 Python (Windows) 中获取 Spotify 当前正在播放的歌曲?

我们如何在 Shaka 播放器中获取当前渲染流的详细信息?

如何在 ios 应用程序的 MPMusicPlayerController 中获取当前正在播放的歌曲数据 [关闭]