Thymeleaf:消息作为另一个消息的参数

时间:2016-11-02 13:49:31

标签: spring thymeleaf

我是Thymeleaf的新手,我正在移动一些小脸页面以使用Thymeleaf。由于我所使用的遗留系统,我们正在使用Thymeleaf 2.1.5和xml配置。

我遇到了一个我一直难以找到适当文档的问题。我想要完成的是将本地化消息作为其他消息中的参数。

我在几个模板中有一个例子就是这样的

Some text string <a href="url">CLICK HERE</a>

属性文件的位置如下:

some.text=Some text string {0} 
click.here=CLICK HERE 

我尝试过这样的事情:

<p th:utext="#{some.text('<a th:utext="#{click.here}" href="url">')}"></p>

但没有运气让它上班。

另外,有没有办法本地化一个字符串,而不是它自己的dom元素的一部分?例如,我想放置一个这样的字符串:

String 

而不是:

<div> String </div>

任何见解都会非常感激。谢谢。

2 个答案:

答案 0 :(得分:3)

对于您的具体示例,这适用于Thymeleaf 3:

@IBAction func handleTouch(_ sender: UIButton) {
    // assumes that the buttons' tags start at 0, which isn't a good idea.
    // see @rmaddy comment bellow 
    let url = urls[sender.tag]
    // use the version of the open method shown bellow because the other one becomes deprecated in iOS 10
    UIApplication.shared.open(URL(string: url)!, options: [:], completionHandler: nil)
}

不幸的是,在输出中的链接周围生成 double 引号似乎不起作用。不知道Thymeleaf是否支持这一点。如果我找到方法,我会更新。单引号似乎有效。

但总的来说,您可能正在寻找<p th:with="openTag='<a href=\'stackoverflow.com\'>',anchorLabel=#{click.here},closeTag='</a>'" th:remove="tag" th:utext="#{some.text(${openTag+anchorLabel+closeTag})}"></p> 的某种组合来创建变量。至于您的第二个问题,您需要使用th:with删除标记。

答案假定配置如下:

th:remove="tag"

答案 1 :(得分:0)

你应该用i18n和链接分割文本生成。你可以包装&#39; some.text&#39;在一个范围内,然后渲染链接。像这样,您可以避免utext,并且如果需要,也可以正确生成带翻译文本的链接。

避免在生成的html中使用span的一种方法是使用属性th:remove="tag"

现在应该可以使用<th:block>...</>元素来实现另一种解决方案,如果我没有弄错的话,那么您不需要再次删除标记。

<span th:remove="tag" th:text="#{some.text}">some text that will be replaced but shows in the mock</span> <a href="url" th:text="#{click.me}">CLICK HERE</a>