Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala play-2.5缓存与国际化_Scala_Caching_Internationalization_Playframework 2.5 - Fatal编程技术网

Scala play-2.5缓存与国际化

Scala play-2.5缓存与国际化,scala,caching,internationalization,playframework-2.5,Scala,Caching,Internationalization,Playframework 2.5,我想在考虑语言时缓存控制器的响应。有了这个页面,我几乎可以使一切正常,但当我使用缓存并单击网页上的链接来更改语言时,我遇到了一个问题:它无法直接工作:只有在刷新页面后语言才会更改,当我尝试不使用缓存时,它才能正常工作。cacheHelper: package controllers import play.api.cache.Cached import play.api.Configuration import play.api.mvc._ import javax.inject.{ Injec

我想在考虑语言时缓存控制器的响应。有了这个页面,我几乎可以使一切正常,但当我使用缓存并单击网页上的链接来更改语言时,我遇到了一个问题:它无法直接工作:只有在刷新页面后语言才会更改,当我尝试不使用缓存时,它才能正常工作。cacheHelper:

package controllers
import play.api.cache.Cached
import play.api.Configuration
import play.api.mvc._
import javax.inject.{ Inject, Singleton }

@Singleton
class CacheHelper @Inject() (val cached: Cached)(implicit configuration: Configuration) {

  def apply(label: String, duration: Int)(action: EssentialAction) = {
    cached({ r: RequestHeader => label + "." + getLanguage(r) }, duration) { action }
  }

  def getLanguage(request: RequestHeader): String = {
    request.cookies.get("PLAY_LANG").map(_.value).getOrElse("fr")
  }
}
控制员:

package controllers
 import javax.inject._
import play.api.i18n._
import scala.concurrent.ExecutionContext
import play.api.mvc.{Action, Controller, EssentialAction, RequestHeader}
@Singleton
class ActuController @Inject() (val cacheHelper: CacheHelper, val messagesApi: MessagesApi)(implicit ec: ExecutionContext) extends Controller with I18nSupport {

  def index = cacheHelper("homePage", 60) {
    Action { implicit req =>
      cacheHelper.getLanguage(req) match {
        case "fr" => Ok("Bonjour le monde")
        case "ru" => Ok("привет")
        case _ => Ok("hello")
      }
    }
  }

}
我曾尝试直接设置“PLAY#LANG”cookie,而不是直接使用#with LANG,但它也不起作用。有什么想法吗?谢谢

“语言改变者”:

package controllers


import play.api.mvc._
import play.api.i18n.{ MessagesApi, Messages, Lang }
import javax.inject.{ Inject, Singleton }

import play.api.cache.Cached
@Singleton
class Application @Inject() (val messagesApi: MessagesApi) extends Controller {

  def selectLang(lang: String) = Action { implicit request =>
    request.headers.get(REFERER).map { referer =>
      Redirect(referer).withLang(Lang(lang))

    }.getOrElse {
      Redirect(routes.Application.index).withLang(Lang(lang))

    }
  }
}