Armazenando em cache uma ação em um site multilíngue usando a API em cache do Play Framework
Para armazenar em cache ações por rótulo e idioma por um determinado número de segundos, escrevi o seguinte método auxiliar (em que rótulo, é o nome que dou à minha ação):
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)
}
Mas estou experimentando algo estranho, quando tento armazenar em cache umAction
para os anos 60 e, enquanto isso, mudar para o francês do inglês, por exemplo, eu continuo recebendo a versão em francês dos anos 60 e depois muda para o inglês.
Depois de investigar, achei esse métodogetLanguage
não é chamado em cada chamada para essa ação como se a chave fosse avaliada somente após o término do período de armazenamento em cache.
Isso não está certo, eu gostaria dissocacheResponseFor
ser chamado toda vez que solicito minha página, o idioma é avaliado usandogetLanguage
e recebo a versão em cache correta, ou seja, devo terminar com duas ações em cache (uma por idioma).
Estou esquecendo de algo?