我有一个以下Clojure的代码渲染功能使用enlive-HTML这使得一个HTML页面。根据所选语言,使用不同的html模板。如何减少下面Clojure代码中的重复项?
正如你可以看到,有很多重复的代码,我想将其删除。
我正在考虑编写一些宏,但如果我理解正确,语言(即lang参数)在宏执行时不可用,因为它在请求中提供,并且处于执行时并且不处于编译时。
我还试图修改enlive为了在以后的某个点添加国际化支持,但我Clojure的技能还没有。
所以问题是:
如何删除在下面的代码的代码重复?
是enlive-HTML的方式去还是我应该用另一个库? 有没有类似于支持i18n的图书馆?
谢谢!
在这里看到的代码:
(ns myapp.core
(:require [net.cgrand.enlive-html :as e))
(deftemplate not-found-en "en/404.html"
[{path :path}]
[:#path] (e/content path))
(deftemplate not-found-fr "fr/404.html"
[{path :path}]
[:#path] (e/content path))
(defn getTemplate [page lang]
(case lang
:en (case page
:page/not-found not-found-en)
:fr (case page
:page/not-found not-found-fr)))
(defn render [lang [page params]]
(apply (getTemplate page lang) params))
究竟你的意思是,回复:“语言是不是可以在宏执行时间”? –
...如果你的宏正在生成你的'deftemplate',你只需要在编译时运行它们来执行那个执行。 –
这属于http:// codereview。stackexchange.com/因为它已经有效。 – tar