Search code examples
playframeworktwirl

Html parameter passed to @Messages gets escaped in Play Framework


I'd like to pass a HTML text as a parameter to a message in a Twirl template, but when the template gets rendered the HTML gets escaped. For example, if my messages file has:

my.message=Click {0} to proceed

and my template.scala.html has

<p>@Messages("my.message", Html("<a href="/">here</a>"))</p>

when I open the page in a browser the <a href="/"here</a> part gets escaped, hence I don't have a clickable link. Is there any way to achieve that?


Solution

  • You should move your usage of Html to the outside, or keep it in both places.

    @Html(Messages("my.message", "<a href=\"/\">here</a>"))
    

    The problem is that the inner Html gets converted to a String when passed into Messages. Then the templates compiler sees that Messages returns a String, so it escapes it. Adding another Html on the outside will prevent that.