1

在 grails 中,我使用 GSP 模板来呈现使用邮件插件发送的 HTML 电子邮件。这很好用,但是 GSP 模板使用了一个参数,该参数又从我的 messages.properties 文件中检索到。现在我想使用HTML,例如<br/>在messages.properties 中,但它在邮件中显示为文本并且标签不被解释。

我已经尝试在 GSP 中的参数上使用 .decodeHTML() ,但它没有用。

我必须在哪里编码/解码,或者是否可以在messages.properties 中使用HTML 标签?

<%@ page contentType="text/html"%>
<html>
<body>
${variableWithHTMLTextFromMessagesProperties}
</body>
</html>
4

4 回答 4

4

可以不使用消息标签在 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 个换行符。你有什么理由不能这样做?

于 2010-07-06T12:17:59.530 回答
2

在这里找到了解决方案。最简单的方法就是使用<%=variableWithHTMLTextFromMessagesProperties%>而不是${variableWithHTMLTextFromMessagesProperties}. 这会阻止 HTML 转义。

于 2010-07-08T07:08:40.200 回答
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个元素”

于 2013-07-31T16:55:56.970 回答
0

文档

<g:encodeAs codec="HTML">
   Profile for user ${user.name} is:
   <g:render template="/fragments/showprofile"/>
</g:encodeAs>
于 2010-07-02T14:46:20.927 回答