Кэширование действий на многоязычном веб-сайте с использованием API-интерфейса Cached от Play Framework
Чтобы кэшировать действия для метки и языка в течение заданного количества секунд, я написал следующий вспомогательный метод (где метка - это имя, которое я даю своему действию):
def cacheResponseFor(label: String, duration: Int)(action: EssentialAction) = {
Cached({r: RequestHeader => (label + getLanguage(r))}, duration){ action }
}
def getLanguage(request: RequestHeader): String = {
request.cookies
.get(helpers.SessionHelpers.LANGUAGE_SESSION)
.map(_.value)
.getOrElse(helpers.LanguageHelpers.FRENCH)
}
Но я испытываю что-то странное, когда пытаюсь кешироватьAction
в течение 60-х годов я переключаю языки с французского на английский, например, я продолжаю получать французскую версию в течение 60-х, затем она переключается на английский.
После исследования я нашел этот методgetLanguage
не вызывается при каждом вызове этого действия как будто ключ оценивается только после окончания периода кэширования.
Это не правильно, я бы этого хотелcacheResponseFor
чтобы меня вызывали каждый раз, когда я запрашиваю свою страницу, язык оценивается с использованиемgetLanguage
и я получаю правильную кэшированную версию, то есть я должен получить 2 кэшированных действия (по одному на язык).
Я что-то пропустил?