Internationalization 在Play framework中是否可能有多个消息文件

Internationalization 在Play framework中是否可能有多个消息文件,internationalization,playframework,Internationalization,Playframework,我们有一个网站,将用于两个不同的客户。在第一次请求期间,将要求用户选择一个客户端。基于该文本,应显示标签和网站内容 是否可能在Play framework中有两个消息文件,并且在会话启动期间将决定消息文件 根据我的研究,对于每个语言环境,我们可以有多个文件,消息将根据请求中的语言环境获取。您可以编写自己的并处理实现play.PlayPlugin.getMessage(字符串、对象、对象…)。然后您可以选择正确的文件。该类可作为如何实现该方法的灵感。不,目前不支持该类。 您可以通过插件()或甚至使

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

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


根据我的研究,对于每个语言环境,我们可以有多个文件,消息将根据请求中的语言环境获取。

您可以编写自己的并处理实现
play.PlayPlugin.getMessage(字符串、对象、对象…
)。然后您可以选择正确的文件。该类可作为如何实现该方法的灵感。

不,目前不支持该类。 您可以通过插件()或甚至使用带有@onApplicationStartup注释的

// 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;
}

用下面的解决方案解决了这个问题

  • 创建了一个类
    MessagesPlugIn
    ,它扩展了
    play.i18n.MessagesPlugIn
  • 创建了一个类
    Messages
    就像
    play.i18n.Messages
  • Messages.java
  • MessagesPlugIn
  • messaagesByClientID
    中将属性加载为
    locales
    play.i18n.MessagesPlugin
  • Messages.java
    中有一个方法
    get()
    ,在会话中从基于
    messaagesByClientID
    的ClientId中检索属性。如果属性不可用,请在
    play.i18n.Messages

  • 7.创建一个自定义标记
    il8nTag
    ,并在HTML模板中使用它
    il8nTag
    将调用
    消息中的方法。get()

    根据Play创建自己的
    模块,但绑定到自己的
    MessagesApi
    实现(定义要加载的文件的部分)


    然后在您的
    应用程序.conf中,启用您自己的模块。

    谢谢,我可以在控制器中加载消息时实现这一点。但是,当使用&{}将消息加载到模板中时,如何覆盖函数性呢。请帮助我。将模板消息添加到messages.defaults后,它们也应该可以正常工作。您尝试过但没有成功吗?实际上,我的要求是,应用程序将有多个具有相同键的属性文件,但值不同。它应该能够根据“ClientID”从其中一个文件检索属性在会话中。如果在默认情况下添加它,则无法按会话值查找。找到了另一个解决方案。创建了customMessagesPlugIn,它扩展了MessagesPlugin并在其中包含HashMap,加载映射中的所有文件,其中客户端Id为键,属性为值。调用Messages.get(),将根据会话中的客户端ID检索值。对于模板,我使用自定义标记检索邮件。Thaks mericano1感谢您的支持。基于此页面给出的答案,我找到了答案并在上面发布。