Play框架中是不是可以有多个消息文件

Posted

技术标签:

【中文标题】Play框架中是不是可以有多个消息文件【英文标题】:Is it Possible to have more than one messages file in Play frameworkPlay框架中是否可以有多个消息文件 【发布时间】:2011-12-12 08:31:40 【问题描述】:

我们有一个网站将用于两个不同的客户。在第一次请求期间,将要求用户选择一个客户端。根据该文本,应显示标签和网站内容。

是否可以在 Play 框架中有两个消息文件,并且在会话启动期间将决定消息文件

根据我的研究,对于每个区域设置,我们可以拥有多个文件,消息将根据请求中的区域设置获取。

【问题讨论】:

【参考方案1】:

不,目前不支持。 您可以在插件中轻松做到这一点(Look at MessagesPlugin),甚至可以使用带有@onApplicationStartup 注释的bootstrap job

// From MessagesPlugin.java

//default languange messages
VirtualFile appDM = Play.getVirtualFile("conf/messages");
if(appDM != null && appDM.exists()) 
    Messages.defaults.putAll(read(appDM));


static Properties read(VirtualFile vf) 
    if (vf != null) 
        return IO.readUtf8Properties(vf.inputstream());
    
    return null;

【讨论】:

谢谢,当我在控制器中加载消息时,我可以做到这一点。但是,当使用 & 在模板中加载消息时,我如何覆盖功能性。请帮帮我。 将模板消息添加到 Messages.defaults 后,它们应该也能正常工作。你试过没有成功吗? 实际上我的要求是,应用程序将有多个具有相同键的属性文件,但值不同。它应该能够根据“ClientID”从任一文件中检索属性会话。如果我默认添加它,我无法通过会话值找到。找到另一个解决方案。创建 customMessagesPlugIn 扩展 MessagesPlugin 并在其中包含 HashMap,加载地图中的所有文件,客户端 ID 作为键,属性作为值。调用 Messages.get(),将根据会话中的客户端 ID 检索值。对于模板,我使用自定义标签来检索消息。 感谢 mericano1 的支持【参考方案2】:

您可以编写自己的PlayPlugin 和处理工具play.PlayPlugin.getMessage(String, Object, Object...)。然后你可以选择正确的文件。 play.i18n.Messages 类可以作为实现该方法的灵感。

【讨论】:

谢谢,根据本页给出的答案,我找到了答案并在上面发布。【参考方案3】:

通过以下解决方案解决了这个问题,

    创建了一个类MessagesPlugIn,它扩展了play.i18n.MessagesPlugin 创建了一个类Messages,就像play.i18n.MessagesMessages.java 中有一个静态地图messaagesByClientIDMessagesPlugIn 中覆盖onApplicationStart()messaagesByClientID 中的属性加载为locales 加载在play.i18n.MessagesPluginMessages.java 中有一个方法get(),从会话中基于ClientId 的messaagesByClientID 检索属性。如果该物业不可用,请致电get()play.i18n.Messages

7.创建了一个自定义标签il8nTag,并将其用于html模板。 il8nTag 将调用Messages.get() 中的方法。

【讨论】:

【参考方案4】:

基于play.api.i18n.I18nModule 创建您自己的Module,但绑定到您自己的MessagesApi 实现,基于Play 的DefaultMessagesApi(here 是定义要加载的文件的部分)

然后在您的application.conf、disable Play's play.api.i18n.I18nModule 中启用您自己的模块。

【讨论】:

以上是关于Play框架中是不是可以有多个消息文件的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 和 OpenSSL 警告消息

Google Play 和 OpenSSL 警告消息

玩I18N库

Spring Cloud Stream微服务消息框架

Spring Cloud Stream微服务消息框架

Play Framework,Scala - 仅当有新数据可用时才向客户端发送 websocket 消息