我想从messages
文件中读取错误消息,但我无法读取。我犯了什么错误?
我想从messages
文件中读取字符串的代码是
Future { Ok(Json.toJson(JsonResultError(messagesApi("error.incorrectBodyType")(langs.availables(0))))) }
messages
文件error.incorrectBodyType=Incorrect body type. Body type must be JSON
messagesApi(" error.incorrectBodyType")应返回Incorrect body type. Body type must be JSON
,但会返回error.incorrectBodyType
。
如果我删除messagesApi(error.incorrectBodyType)
中的双引号,则代码无法编译
更新
我添加了几个调试打印,并注意到我在MessagesApi中使用的密钥未定义。虽然我已经在messages
文件中创建了它们,但我不知道为什么。
println("langs array"+langs.availables)
println("app.title"+messagesApi.isDefinedAt("app.title")(langs.availables(0)))
println("error"+messagesApi.isDefinedAt("error.incorrectBodyType")(langs.availables(0)))
打印
langs arrayList(Lang(en_GB))
app.titlefalse
errorfalse
更新2
我可能已经找到了问题,但我不知道如何解决它。基本上,我正在运行我的测试用例而没有Application
的实例。我通过调用mocking
中定义的stubMessagesApi()
来Helpers.stubControllerComponents
messagesApi,如果我使用Application
运行相同的代码,例如class UserControllerFunctionalSpec extends PlaySpec with OneAppPerSuiteWithComponents
,那么app.title
和{ {1}}已定义。似乎没有error
的实例,Application
没有使用MessagesApi
文件。
答案 0 :(得分:0)
我可以使用MessagesApi
DefaultMessagesApi
的新实例来解决问题
val messagesApi = new DefaultMessagesApi( //takes map of maps. the first is the language file, the 2nd is the map between message title and description
Map("en" -> //the language file
Map("error.incorrectBodyType" -> "Incorrect body type. Body type must be JSON") //map between message title and description
)
)
val controller = new UserController(mockUserRepository,mockControllerComponents,mockSilhouette,messagesApi,stubLangs())