Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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 如何在不重新启动的情况下重新加载messages.en?_Scala_Playframework_Internationalization - Fatal编程技术网

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

Scala 如何在不重新启动的情况下重新加载messages.en?,scala,playframework,internationalization,Scala,Playframework,Internationalization,似乎只有当我重新编译/重新启动应用程序时,messages.en文件才会重新加载。在Prod模式下,如何在不重新启动的情况下重新加载它 我正在使用Play 2.3简短回答:绕过依赖注入单例,创建我们自己的MessagesApi: implicit val messagesApi = new DefaultMessagesApi(Environment.simple(), current.configuration, new DefaultLangs(current.configuration))

似乎只有当我重新编译/重新启动应用程序时,
messages.en
文件才会重新加载。在Prod模式下,如何在不重新启动的情况下重新加载它


我正在使用Play 2.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))

多亏bjfletcher提出了一个很好的建议,我已经解决了我的问题

基本上,我通过将
defaultmessagesplugin=disabled
添加到
application.conf
中禁用了play框架中的默认messageapi,并编写了一个新的messageapi插件,然后通过在`conf/play.plugins中添加一行
1001:services.DMessages
来启用它。dmessage的实现是:

package services
import play.api.Application
import play.api.i18n.{MessagesApi, MessagesPlugin}
class DMessages(app: Application) extends MessagesPlugin{
  override def enabled = true

  /**
   * This is where we read messages.en file and map it back to messages and pass into MessageApi
   * @return MessageApi that contained mapped messages
   */
  override def api: MessagesApi = {
    var messages:Map[String,Map[String,String]] = Map()
    messages = messages ++ Map("language" -> Map("key"-> "value")) //e.g. Map("en" -> Map("hello" -> "Hello world!"))
    MessagesApi(messages)
  }
}

谢谢你的回答。似乎
DefaultMessagesApi
仅在播放2.4中可用。很抱歉,我忘了提到我当前的系统在播放2.3