60

I'm using Spring 3 and Thymeleaf to make some webpages and I am lost as for how to show messages like this:

welcome.message=Hello {0}, welcome!

and then replace {0} with the user name inside thymeleaf tags:

<h1 th:text="#{welcome.message}">Welcome Placeholder</h1>

I'm not even sure if {0} is the right syntax for the bundle message.

Tom
  • 17,103
  • 8
  • 67
  • 75
Hoffmann
  • 14,369
  • 16
  • 76
  • 91

3 Answers3

96

You can use

#{welcome.message(${some.attribute})}

where some.attribute would be the value to use when replacing {0}.

You should be able to comma separate the values between the () to add more values to be used.

Sotirios Delimanolis
  • 274,122
  • 60
  • 696
  • 724
33

You can even use a calculated message key as a parameter:

<p th:text="#{messages.msg1(${param1})}"></p>
<p th:text="#{messages.msg2(${param2},${param3})}"></p>
<p th:text="#{messages.msg3(#{${param4}})}"></p>

Above, the parameter of [msg3] is a message key [#{key}] where key is itself calculated [${param4}]. The benefit is that you can insert internationalized calculated fragments in an internationalized message.

Mahozad
  • 18,032
  • 13
  • 118
  • 133
Serge Tahé
  • 1,869
  • 2
  • 19
  • 20
9

If you need to pass an array of parameters where you don't know the size of the array then you can use:

<p th:text="${#messages.msgWithParams(messageKey, messageParams)}"></p>
<!-- or -->
<p th:text="${#messages.msgOrNullWithParams(messageKey, messageParams)}"></p>

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#messages-1

Brett Y
  • 7,171
  • 1
  • 28
  • 42