如何在grails messages.properties中使用HTML进行邮件发送

时间:2010-07-02 12:52:26

标签: html grails internationalization view decode

在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>

4 个答案:

答案 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 &lt;strong&gt;1&lt;/strong&gt; element|1<There are &lt;strong&gt;{0}&lt;/strong&gt; 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>