1

我在 Messages("title") 上收到上述编译错误

import play.api.i18n.Messages
import play.api.mvc._
import scala.concurrent.Future 

trait ApplicationController extends Controller {

  def get = Action.async {
    implicit request => Future.successful(Ok(views.html.index(Messages("title"))))
  }
}

object ApplicationController extends ApplicationController

我在项目的 conf 文件夹中的消息文件包含以下内容

 title = hello

如果您想知道,我的模板会包含以下内容:

@(title: String)

为什么我会收到此编译错误?

4

2 回答 2

2

您需要在 Play 2.5 中注入它。例如,我的一个控制器的声明如下所示:

import play.api.i18n.MessagesApi
import javax.inject._

class ApplicationController @Inject()(
                                           val messagesApi:MessagesApi,
                                           val env:Environment[User, CookieAuthenticator],
                                           implicit val webJarAssets:WebJarAssets,
                                           val timeZoneItemService:TimeZoneItemService,
                                           val userService: UserService,
                                           authInfoRepository: AuthInfoRepository,
                                           passwordHasher: PasswordHasher
                                         )

您可以在此处阅读更多信息。

于 2016-08-10T11:18:28.387 回答
1

就像上面提到的 Alexander,我需要在 Play 2.5 中使用注入。工作代码现在如下所示:

import play.api.i18n.{Messages, I18nSupport, MessagesApi}
import play.api.mvc._
import scala.concurrent.Future

class ApplicationController @Inject()(val messagesApi:MessagesApi) extends Controller with I18nSupport{

  def get = Action.async {
    implicit request => Future.successful(Ok(views.html.index(Messages("title"))))
  }
}

如果您有一个测试类,您可以遵循以下逻辑并确保导入“play.api.i18n.Messages.Implicits._”:

import controllers.ApplicationController
import org.scalatestplus.play.{OneServerPerSuite, PlaySpec}
import play.api.i18n.{MessagesApi, Messages}
import play.api.i18n.Messages.Implicits._
import play.api.mvc.Result 
import play.api.test.FakeRequest
import play.api.test.Helpers._
import scala.concurrent.Future

class ApplicationControllerSpec extends PlaySpec with OneServerPerSuite{

  val applicationController = new ApplicationController(app.injector.instanceOf[MessagesApi])

  "ApplicationController" must {

    "load front page successfully" in {
       val result: Future[Result] = applicationController.get().apply(FakeRequest())

       contentAsString(result) must include(Messages("home.title"))
    }
  }
} 
于 2016-08-11T08:45:19.873 回答