Как использовать HTML в grails messages.properties для отправки почты - PullRequest
1 голос
/ 02 июля 2010

В Grails я использую шаблон GSP для рендеринга электронной почты в формате HTML, отправленной с помощью почтового плагина.Это работает нормально, однако шаблон GSP использует параметр, который, в свою очередь, извлекается из моего файла messages.properties.Теперь я хочу использовать HTML, например <br/> внутри messages.properties, но в письме он отображается как текст и тег не интерпретируется.

Я уже пытался использовать .decodeHTML ()параметр в GSP, но он не работает.

Где я должен кодировать / декодировать или вообще возможно использовать HTML-теги внутри messages.properties?

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

Ответы [ 4 ]

3 голосов
/ 06 июля 2010

Не можете ли вы выполнить локализацию в 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), я получаю 2 переноса строк в полученном html-письме.По какой причине вы не можете сделать это таким образом?

2 голосов
/ 31 июля 2013

Я создал собственное решение с помощью пользовательской метки.

def htmlMessage = { attrs, body ->
    out << g.message(attrs, body).decodeHTML()
}

Затем, чтобы определить сообщение, оно должно быть с escape-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]" />

Результатом является HTML-код i18n, сгенерированный с сильным шрифтом. Как это:

"Есть 9 элементов"

2 голосов
/ 08 июля 2010

Нашел решение здесь . Самый простой способ - просто использовать <%=variableWithHTMLTextFromMessagesProperties%> вместо ${variableWithHTMLTextFromMessagesProperties}. Это останавливает экранирование HTML.

0 голосов
/ 02 июля 2010

Из документов :

<g:encodeAs codec="HTML">
   Profile for user ${user.name} is:
   <g:render template="/fragments/showprofile"/>
</g:encodeAs>
...