6

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

我为英语语言环境创建了一个文件夹,即 en 和另一个用于法语语言环境的文件夹, fr 在 conf 文件夹中。en 包含 messages1_en.properties 和 messages2_en.properties fr 包含 messages1_fr.properties 和 messages2_fr.properties

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

谢谢

4

2 回答 2

0

在不引入您自己的替代实现并使用它而不是内置消息的情况下做到这一点的唯一方法是使用被黑的语言环境,因此您可以执行 fr_type1、fr_type2 或类似的操作来选择正确的替代方案。

这可能是个坏主意,因为以与预期使用方式不同的方式使用 API 总是有风险的,存在意外行为的高风险并且它可能很脆弱,因为无法保证您能够在未来的版本等中使用虚构的语言环境。

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

祝你好运!

于 2013-11-08T09:07:53.400 回答
0

这是一个老问题,但我有一个很接近的问题,我在任何地方都没有找到解决方案。

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

  1. 覆盖play.api.i18n.DefaultMessagesApiProvider

    @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"))
      }
    
    }
    
  2. 在中添加 Guice 绑定Module.java

    @Override
    public void configure() {
        bind(DefaultMessagesApiProvider.class).to(CustomMessagesApiProvider.class);
    }
    

这是我的第一个 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)
    }
于 2018-07-05T11:01:39.340 回答