scala - 动态加载旋转模板

标签 scala template-engine twirl

在我的 Scala 项目中,我使用了 Twirl 模板引擎。俄语和英语的模板文件结构是重复的,例如我有以下两条路径:en.Send.txt.MonoEnsureru.Send.txt.MonoEnsure

在我的代码中,我希望能够动态加载 enru 模板,如下所示:

def render(lang: String) = lang.Send.txt.MonoEnsure("hi")
render("en") // does not work, just to illustrate my point

我怎样才能做到这一点?

最佳答案

我认为这是应该实现的代码:

import play.twirl.api.Template1

def getTemplate[T](name : String)(implicit man: Manifest[T]) : T =
  Class.forName(name + "$").getField("MODULE$").get(man.erasure).asInstanceOf[T]

def render(lang: String) = 
  getTemplate[Template1[String,String]](s"$lang.Send.txt.MonoEnsure").render("hi")

render("en")

模板被编译为 BaseScalaTemplate,因此您可以使用反射调用它。您只需要知道模板的参数数量,就可以将其加载为特征 play.api.twirl.TemplateX 的实例。在这种情况下 Template1[String, String](参数的第一个字符串和渲染响应类型的第二个字符串)。

查看此线程以获取有关 scala 中反射的更多信息 How do I call a Scala Object method using reflection?

关于scala - 动态加载旋转模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578073/

相关文章:

java - 登录失败时如何在登录页面显示消息

scala - 解析器组合器,分离语法和 AST 构造

scala - 比较两个数据帧并更新值

scala - Play for Scala 中的动态路径路由

java - 一个有用的指标,用于确定 JVM 何时将陷入内存/GC 故障

yaml - Markdown 到 Markdown 的模板语言

java - 为什么带有自定义分隔符的 StringTemplates 不起作用?

templates - 是否有任何 Java 模板引擎基准测试?

java - Play Framework Java 中的 For 循环

json - Play Framework - 如何在 View 中遍历 JsonNode 树?