0

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

在 JsonSerializer 类的实现中,我需要根据浏览器的主要语言对消息进行国际化。不幸的是,在该上下文中隐含的对象 Lang 是 JVM 语言,而不是请求的接受语言。

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

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.
}
4

1 回答 1

0

It must be passed to your class:

class LangStringSerializer(val lang: Lang) extends JsonSerializer[LangString] {
  def serialize(string: LangString, json: JsonGenerator, provider: SerializerProvider) {     
     json.writeString(string.localized_value(lang))
  }
}

and you have to retrive it from your controller:

def myJsonAction = Action { implicit request =>
  Ok(new LangStringSerializer(lang).serialize(...))
}
于 2012-08-26T14:25:54.170 回答