使用spring internationlization与freemarker模板集成时出错

时间:2017-11-29 16:35:47

标签: templates internationalization freemarker

我正在使用freemarker模板生成电子邮件。我将freemarker与spring结合使用。我很难通过参数替换来实现国际化。我让它用于一个参数替换。 例如:

  

message.hello = Hello,{0}

在fm模板中

我有类似

的东西
  

< @ spring.messageArgs" message.hello" name />

但是,我无法弄清楚我们是如何为多个param替换做的。

  

message.greet = Hello {0},欢迎来到{1}

我怎样才能在模板中表示这一点? 当我尝试以下内容时:

  

< @ spring.messageArgs" message.greet"姓名,地点/>

它不起作用。你能帮忙吗? 问候

1 个答案:

答案 0 :(得分:1)

在Spring源代码中查看ExecutorService es = Executors.newCachedThreadPool(); List<GitUser> result = es.invokeAll( Stream.of(service1, service2, service3) .<Callable<GitUser>>map(s -> s::getGitUser) .collect(Collectors.toList()) ) .stream() .map(future -> { try { return future.get(); } catch (InterruptedException|ExecutionException ex) { throw new IllegalStateException(ex); } }) .collect(Collectors.toList()); ,该宏定义为spring.ftl,这有问题,因为<#macro messageArgs code, args>${springMacroRequestContext.getMessage(code, args)}</#macro>中的getMessage有多个重载,并且您希望致电org.springframework.web.servlet.support.RequestContextgetMessage(String code, Object[] args)。所以你想要这个:

getMessage(String code, List<?> args)

请注意,因为还有<@spring.messageArgs "message.greet", [name, place] /> 重载,即使您只有1个参数,也需要使用getMessage(String code, String defaultValue),否则它将是默认值。