PlayFramework 2-Scala-如何将隐式Lang传递到控制器范围之外

PlayFramework 2-Scala-如何将隐式Lang传递到控制器范围之外,scala,internationalization,playframework-2.0,Scala,Internationalization,Playframework 2.0,在Play 2.0应用程序中,我使用Jerkson进行自定义JSON序列化 在JsonSerializer类的实现中,我需要基于浏览器的主语言对消息进行国际化。不幸的是,该上下文中隐含的对象Lang是JVM语言,而不是Accept语言​​请求的一部分 在控制器上下文之外访问浏览器语言的最佳方式(如果有)是什么 class LangStringSerializer extends JsonSerializer[LangString] { def serialize(string: LangSt

在Play 2.0应用程序中,我使用Jerkson进行自定义JSON序列化

在JsonSerializer类的实现中,我需要基于浏览器的主语言对消息进行国际化。不幸的是,该上下文中隐含的对象Lang是JVM语言,而不是Accept语言​​请求的一部分

在控制器上下文之外访问浏览器语言的最佳方式(如果有)是什么

class LangStringSerializer extends JsonSerializer[LangString] {
  def serialize(string: LangString, json: JsonGenerator, provider: SerializerProvider) {     
    json.writeString(string.localized_value)
  }
//the method localized_value has an implicit parameter Lang and must produce 
//a localized string based on the browser main language.
}

必须将其传递给您的类:

class LangStringSerializer(val lang: Lang) extends JsonSerializer[LangString] {
  def serialize(string: LangString, json: JsonGenerator, provider: SerializerProvider) {     
     json.writeString(string.localized_value(lang))
  }
}
您必须从控制器中重新获取它:

def myJsonAction = Action { implicit request =>
  Ok(new LangStringSerializer(lang).serialize(...))
}

这是不允许的:方法“serialize”必须实现签名中没有抽象的抽象。此外,正如我所说的,这里的隐式lang不是我们想要的。好吧,但我不明白为什么隐式lang(通常来自控制器)是JVM lang?浏览器中的语言是由控制器方法
implicit def lang
提取的语言,该方法从
request.acceptLanguages
中提取第一种语言。