Java Thymeleaf:检测硬编码文本

Java Thymeleaf:检测硬编码文本,java,thymeleaf,Java,Thymeleaf,是否有机会在启动时在Thymeleaf模板和日志中自动搜索非本地化文本 我的基础设施:Ant、Spring、Thymeleaf。不幸的是,没有明确的文档记录方法(据我所知) 话虽如此,我做了一些类似的事情,我想检查模板中的一些东西并记录一个事件,但是实现很糟糕 我必须警告您,这太可怕了,因为它不是标准版本,很可能会在将来的版本中被破坏,所以我会谨慎使用,绝对不会在任何生产代码中使用。 这要求模板解析程序可缓存为true-org.thymeleaf.templateresolver.templat

是否有机会在启动时在Thymeleaf模板和日志中自动搜索非本地化文本


我的基础设施:Ant、Spring、Thymeleaf。

不幸的是,没有明确的文档记录方法(据我所知)

话虽如此,我做了一些类似的事情,我想检查模板中的一些东西并记录一个事件,但是实现很糟糕

我必须警告您,这太可怕了,因为它不是标准版本,很可能会在将来的版本中被破坏,所以我会谨慎使用,绝对不会在任何生产代码中使用。

这要求模板解析程序可缓存为
true
-
org.thymeleaf.templateresolver.templateresolver#setCacheable(true)
默认值为
true

我可以通过扩展
org.thymeleaf.cache.StandardCacheManager
(您需要在
org.thymeleaf.TemplateEngine
上设置缓存管理器)并覆盖
initializeTemplateCache()
,该缓存返回了一个自定义版本的
org.thymeleaf.cache.StandardCache
。我的缓存实现覆盖了
put(..)
方法,该方法将
org.thymeleaf.Template
作为值传入

然后可以通过
getDocument()
访问
org.thymeleaf.dom.Document
,然后可以递归地遍历子级(其中一些子级将是
org.thymeleaf.dom.AbstractTextNode
)。在本例中,您可能还希望遍历元素节点上的所有属性

对于您来说,您必须编写一些逻辑来确定文本是否不会被本地化,从而确定
{}
表达式是否未被使用,或者该表达式是否不在
th:…=“{}”
标记中,或者是内联
[[{}]


我知道这很难看,但对我来说很管用。如果有人有更干净的解决方案,我洗耳恭听。

唯一难看的是,你使用了CacheManager,这取决于cacheable是否为真。在我们的开发环境中,我们都将其设置为false。所以,你的回答很有帮助,但不适用于我。