code: public static String format(Locale locale, Messages message, Object... args) {
  		String formatString = message.getFormatString(locale);
  		Object[] sortArgs = sortArgs(formatString, args);
  		String printfString = Stream.of(formatString.split("%%"))
  				.map(part -> placeholderPattern.matcher(part).replaceAll("%s")) //
  				.collect(Collectors.joining("%%"));
  		return String.format(printfString, sortArgs);
  	}
docs: Interpolate arguments into the message format string for the given message.
  <p>
  If a non-null locale is provided, an attempt is made to load a properties
  file for the Message class of which this message is an instance, and the
  property named by this message's name is used as the format string. If that
  fails, or if the locale is null, the message object's default format string
  is used.
  <p>
  The format string contains embedded place holders indicating where arguments
  are to be substituted. Each place holder takes the form <code>%n</code> or
  <code>%{n}</code>, where <code>n</code> is an integer from 1 to the number of
  arguments. The second form allows interpolation at a site immediately
  followed by other digits.
  <p>
  To prevent a percent sign from triggering interpolation, double it:
  <code>%%</code>. For example, <code>"%%1 %%{2}"</code> will always produce
  <code>"%1 %{2}"</code>.
  <p>
  The result is obtained by replacing each placeholder with the corresponding
  argument's {@link #toString()} value (except that null arguments are rendered
  as empty strings).
  
  @param message Messages
  @param args Args
  @param locale Locale
  @return message with interpolated arguments