是否可以在Play框架中拥有多个消息文件

时间:2011-12-12 08:31:41

标签: internationalization playframework

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

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

在我的研究中,我们可以为每个Locale提供多个文件,消息将根据请求中的区域设置获取。

4 个答案:

答案 0 :(得分:4)

不,目前不支持。 您可以在插件(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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  1. 创建了一个扩展MessagesPlugIn
  2. 的班级play.i18n.MessagesPlugin
  3. Messages
  4. 一样创建了一个类play.i18n.Messages
  5. messaagesByClientID
  6. 中有一个静态地图Messages.java
  7. onApplicationStart()
  8. 中重写MessagesPlugIn
  9. messaagesByClientID中加载locales加载play.i18n.MessagesPlugin
  10. 中加载的属性
  11. get()中有方法Messages.java,在会话中从基于messaagesByClientID的ClientId检索属性。如果该房产无法使用,请致电get()
  12. 中的play.i18n.Messages

    7.修复了自定义标记il8nTag及其在HTML模板中使用的标记。 il8nTag将调用Messages.get()中的方法。

答案 3 :(得分:0)

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

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