Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 如何在play 2.0框架中将消息文件拆分为多个文件_Html_Playframework 2.0 - Fatal编程技术网

Html 如何在play 2.0框架中将消息文件拆分为多个文件

Html 如何在play 2.0框架中将消息文件拆分为多个文件,html,playframework-2.0,Html,Playframework 2.0,我有一个巨大的消息文件,我需要分为不同语言的多个文件。 例如: 我为英语区域设置创建了一个文件夹,即en,为法语区域设置创建了另一个文件夹,即conf文件夹中的fr。 en包含messages1_en.properties和messages2_en.properties fr包含messages1_fr.properties和messages2_fr.properties 如何在我的视图中访问这些属性文件 感谢在不引入您自己的替代实现和使用替代内置消息的情况下,实现这一点的唯一方法是使用黑客攻击

我有一个巨大的消息文件,我需要分为不同语言的多个文件。 例如:

我为英语区域设置创建了一个文件夹,即en,为法语区域设置创建了另一个文件夹,即conf文件夹中的fr。 en包含messages1_en.properties和messages2_en.properties fr包含messages1_fr.properties和messages2_fr.properties

如何在我的视图中访问这些属性文件


感谢

在不引入您自己的替代实现和使用替代内置消息的情况下,实现这一点的唯一方法是使用黑客攻击的区域设置,因此您可以使用fr_type1、fr_type2或类似的方法来选择正确的替代方案

这可能是一个坏主意,因为以与预期使用方式不同的方式使用API总是有风险的,存在意外行为的高风险,而且可能很脆弱,因为无法保证您在将来的版本中能够使用虚构的区域设置等

如果您查看消息实现,您可能会得到一些关于如何实现自己的消息的想法,而不必大惊小怪


祝你好运

这是一个老问题,但我有一个非常棘手的问题,我在任何地方都没有找到解决方案

本例使用配置键从具有自定义名称的文件加载消息。但您可以轻松地修改它,以便从子目录和/或多个消息文件加载消息文件

  • 覆盖play.api.i18n.defaultMessagesApipProvider

    @Singleton
    class CustomMessagesApiProvider  @Inject() (
                                                environment: Environment,
                                                config: Configuration,
                                                langs: Langs,
                                                httpConfiguration: HttpConfiguration)
      extends DefaultMessagesApiProvider(environment, config, langs, httpConfiguration) {
    
    
      def filename =
        config.get[String]("play.i18n.filename")
    
      override protected def loadAllMessages: Map[String, Map[String, String]] = {
        langs.availables.map(_.code).map { lang =>
          (lang, loadMessages(filename +"."  + lang))
        }.toMap
          .+("default" -> loadMessages(filename))
          .+("default.play" -> loadMessages(filename+".default"))
      }
    
    }
    
  • Module.java中添加Guice绑定

    @Override
    public void configure() {
        bind(DefaultMessagesApiProvider.class).to(CustomMessagesApiProvider.class);
    }
    
  • 这是我的第一个Scala类,所以也许它可以改进。但它是有效的

    加载多个文件(可编译但未测试)


    我试图理解Messages的实现,但我无法理解何时以及调用了哪个Messages类,在scala中也有消息类,我可以在play 2.10 jar中看到多条消息和消息$class文件。我完全困惑了…请帮助我确认play 2.0国际化功能中任何其他语言的标签转换是服务器还是客户端工作。有一个Java消息实现,只调用Scala实现。转换是在服务器端完成的。
        override protected def loadAllMessages: Map[String, Map[String, String]] = {
          langs.availables.map(_.code).map { lang =>
            (lang,
              loadMessageFiles("." + lang))
          }.toMap
            .+("default" -> loadMessageFiles(""))
            .+("default.play" -> loadMessageFiles(".default"))
        }
    
        private def loadMessageFiles(suffix: String) = {
          loadMessages("messages-1" + suffix) ++ loadMessages("messages-2" + suffix)
        }