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.Messages
在Messages.java
中有一个静态地图messaagesByClientID
在MessagesPlugIn
中覆盖onApplicationStart()
将messaagesByClientID
中的属性加载为locales
加载在play.i18n.MessagesPlugin
在Messages.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框架中是不是可以有多个消息文件的主要内容,如果未能解决你的问题,请参考以下文章