0

Play 2.0アプリケーションでは、カスタムJSONシリアル化にJerksonを使用しています。

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

1 に答える 1

0

クラスに渡す必要があります。

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(...))
}
于 2012-08-26T14:25:54.170 に答える