在Grails中,我使用GSP模板呈现使用邮件插件发送的HTML电子邮件。这很好用,但是GSP模板使用了一个param,而param又是从我的messages.properties文件中检索的。现在我想使用HTML,例如在messages.properties中有<br/>
,但它在邮件中显示为文本,并且不会解释标记。
我已经尝试在GSP中的参数上使用.decodeHTML(),但它没有用。
我在哪里编码/解码,或者根本可以在messages.properties中使用HTML标签?
<%@ page contentType="text/html"%>
<html>
<body>
${variableWithHTMLTextFromMessagesProperties}
</body>
</html>
答案 0 :(得分:3)
您是否可以使用消息标记在GSP中进行本地化,类似于以下内容?控制器 -
sendMail {
to "my@email.com"
subject "cheese"
html g.render(template:"myTemplate")
}
然后在你的_myTemplate.gsp -
中<%@ page contentType="text/html" %>
<html><head></head>
<body>
<p>test: <g:message code="a.test"/></p>
</body>
</html>
然后在messages.properties中 -
a.test=this <br/><br/> is a test
这种方式对我来说很好(Grails 1.3.1,邮件0.9),我收到的html电子邮件中有2个换行符。你有什么理由不能这样做吗?
答案 1 :(得分:2)
找到解决方案here。最简单的方法就是使用<%=variableWithHTMLTextFromMessagesProperties%>
代替${variableWithHTMLTextFromMessagesProperties}
。这会停止HTML转义。
答案 2 :(得分:2)
我使用自定义标记库创建了自己的解决方案。
def htmlMessage = { attrs, body ->
out << g.message(attrs, body).decodeHTML()
}
然后要定义一条消息,必须使用转义的html:
my.html.message={0,choice,0#There is no elements|1#There is <strong>1</strong> element|1<There are <strong>{0}</strong> elements}
对于html:
<g:htmlMessage code="my.html.message" args="[qElements]" />
结果是使用强字体编号生成的i18n html。像这样:
“有 9 元素”
答案 3 :(得分:0)
来自docs:
<g:encodeAs codec="HTML">
Profile for user ${user.name} is:
<g:render template="/fragments/showprofile"/>
</g:encodeAs>