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

标签 scala playframework internationalization

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

我使用的是 Play 2.3

最佳答案

简短回答:绕过依赖注入(inject)的单例,并创建我们自己的 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))

关于scala - 如何在不重新启动的情况下重新加载 messages.en?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31299665/

相关文章:

playframework - 如何将Play 2.2 Scala应用程序创建为SBT子项目

playframework - 在功能测试中,如何使用 Play Framework 中的安全模块伪造经过身份验证的用户?

node.js - 支持 i18n 的环回

java - 语言环境货币符号

java - 如何在java文件中运行scala jar文件?

scala - 在 Scala 中是否有创建尾递归函数的通用方法?

postgresql - 在 slick, scala 中处理 Postgres json 数据类型

scala - 简单 Play 应用程序的最小 RAM

java - 在运行时设置 springs 固定区域设置解析器(对于 i18n)默认区域设置

java - Spark 读取 .7z 文件