Кэширование действий на многоязычном веб-сайте с использованием 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 кэшированных действия (по одному на язык).

Я что-то пропустил?

Ответы на вопрос(2)

Ваш ответ на вопрос