如何在不重启的情况下重新加载messages.en?

时间:2015-07-08 17:31:04

标签: scala playframework internationalization

似乎messages.en文件仅在重新编译/重新启动应用程序时重新加载。如何在Prod模式下重新加载而不重新启动。

我正在使用Play 2.3

1 个答案:

答案 0 :(得分:3)

简短回答:绕过依赖注入的单例,并创建我们自己的MessagesApi

implicit val messagesApi = new DefaultMessagesApi(Environment.simple(), current.configuration, new DefaultLangs(current.configuration))

答案很长:

Play的MessagesApi对象是一个单例,意味着我们始终使用相同的实例:

@Singleton
class DefaultMessagesApi @Inject() (environment: Environment, configuration: Configuration, langs: Langs) extends MessagesApi { ...

及其保存所有消息的messages字段是不可变的。

val messages: Map[String, Map[String, String]] = loadAllMessages

我们无法修改它。

然而......我们可以创建自己的MessagesApi并使用它。例如:

implicit val messagesApi = new DefaultMessagesApi(Environment.simple(), current.configuration, new DefaultLangs(current.configuration))