是否有机会在启动时在Thymeleaf模板和日志中自动搜索未本地化的文本?
我的基础架构: Ant,Spring,Thymeleaf。
发布于 2015-11-26 09:41:04
不幸的是,(据我所知)没有一种干净的、有文档记录的方式来做这件事。
话虽如此,我已经做了一些类似的事情,我想要检查模板中的某些东西并记录一个事件,但是实现是丑陋的。
我必须警告你,这太可怕了,因为它不是标准的,可能会在未来的版本中被破坏,所以我会谨慎使用,并且绝对不会在任何生产代码中使用。
这要求模板解析器可以缓存为true
- org.thymeleaf.templateresolver.TemplateResolver#setCacheable(true)
,缺省值为true
。
我可以通过扩展org.thymeleaf.cache.StandardCacheManager
(您需要在org.thymeleaf.TemplateEngine
上设置缓存管理器)并覆盖返回自定义版本org.thymeleaf.cache.StandardCache
的initializeTemplateCache()
来做到这一点。我的缓存实现覆盖了put(..)
方法,该方法传入一个org.thymeleaf.Template
作为值。
这样就可以通过getDocument()
访问org.thymeleaf.dom.Document
,然后您可以递归地遍历子对象(其中一些子对象将是org.thymeleaf.dom.AbstractTextNode
)。在本例中,您可能还希望遍历元素节点上的所有属性。
然后,您必须编写一些逻辑来确定文本是否不会被本地化,确定是否没有使用#{}
表达式,或者该表达式是否不在th:...="#{}"
标记中,或者是否在内联[[#{}]]
中
我知道这很难看,但它对我很管用。如果有人有更干净的解决方案,我洗耳恭听。
https://stackoverflow.com/questions/33933716
复制