【问题标题】:i18n, Messages object in every template necessary? Play Scalai18n,每个模板中的 Messages 对象都需要吗?玩斯卡拉
【发布时间】:2015-09-08 22:01:47
【问题描述】:

我也是 Play 和 Scala 的新手。我在阅读“Play with Scala”一书时遇到了 i18n 的问题。问题在于Messages 对象,必须在每个模板中获取该对象才能让应用程序正常工作。

困扰我的是,即使我没有在我的一个 Scala 模板文件中使用 Messages 对象,但我在其中继承/调用另一个模板,我仍然必须添加 (implicit messages: Messages) 在文件顶部。

谁能解释一下这是为什么?是否需要在每个模板中添加Messages 对象?它相当有问题,我相信它可以以某种方式解决。

【问题讨论】:

    标签: scala playframework internationalization messages


    【解决方案1】:

    这不是 Play Framework 特定的问题,而是隐式参数在 Scala 中的工作方式(请参阅 Understanding implicit in Scala)。

    使用以下函数,它“神奇地”将一个数字添加到数字列表中。

    def addMagic[A](numbers: List[Int])(implicit add: Int) = numbers.map(_ + add)
    

    我们可以使用addMagic如下:

    {
      implicit val magicNumber = 42
      addMagic(List(1, 2, 3))
      // List[Int] = List(43, 44, 45)
    }
    

    如果我们在另一个函数中使用 addMagic 而不传递隐式 Int

    def printMagicNumbers(numbers: List[Int]) = println(addMagic(numbers))
    

    我们得到以下错误:

    错误:找不到参数添加的隐式值:Int

    所以我们还需要给printMagicNumbers添加一个隐式参数:

    def printMagicNumbers(numbers: List[Int])(implicit add: Int) = 
      println(addMagic(numbers))
    

    以同样的方式,如果模板函数调用需要 Messages 对象的模板函数,则它需要隐式 Messages 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多