Ich verwende einfache Middleware die Result
Zuerst im Play 2.3.x machen nicht korrekte Sprache nicht verwendet
object WithLanguage extends ActionFunction[User, User] {
def invokeBlock[A](request: User[A], block: (User[A]) => Future[Result]): Future[Result] = {
if(request.cookies.get(Play.langCookieName).isEmpty){
val lang: Lang = Lang.get(request.user.language).getOrElse(play.api.i18n.Lang.preferred(request.acceptLanguages))
block(request).withLang(lang))
} else {
block(request)
}
}
}
Aber die erste Antwort nicht mit der entsprechenden Sprache wiedergegeben zu aktualisieren - auf Refresh ja.
Ich kann es durch eine kreisförmige Umleitung im Falle der Einrichtung eines neuen Cookie Future(Redirect(request.uri).withLang(...)
zur Arbeit arbeiten, aber ich frage mich, ob es einen saubereren Weg gibt.
Haben Sie versucht, die Anfrage vor dem Aufruf des Blocks zu ändern? Block (request.withLang (lang)) – mavarazy
Dank @mavarazy ja die Anfrage hat nicht die Methode 'withLang' nur das Ergebnis tut – tgk
Können Sie Anfrage ändern und einen Cookie setzen, vor der Verarbeitung im Block? – mavarazy