Java Spring Freemarker模板国际化

Java Spring Freemarker模板国际化,java,spring,internationalization,freemarker,Java,Spring,Internationalization,Freemarker,我正在尝试为我的模板进行国际化,但我不确定这样做是否最有效 我将消息提取到资源包中,并使用MessageSource方法getMessage(String var1,@Nullable Object[]var2,Locale var3)根据Locale获取翻译,然后将其放入模型并处理模板 private String processTemplate(String templateName, String locale) { try { String greeting = me

我正在尝试为我的模板进行国际化,但我不确定这样做是否最有效

我将消息提取到资源包中,并使用MessageSource方法
getMessage(String var1,@Nullable Object[]var2,Locale var3)
根据Locale获取翻译,然后将其放入模型并处理模板

private String processTemplate(String templateName, String locale) {
    try {
      String greeting = messageSource.getMessage("messages.greeting", null, new Locale(locale));
      Map<String, String> model = new HashMap<>();
      model.put("greeting", greeting);
      Template template = freemarkerConfiguration.getConfiguration().getTemplate(templateName);
      return FreeMarkerTemplateUtils.processTemplateIntoString(template, model);
    } catch (IOException | TemplateException e) {
      log.error("Error when processing template {}", templateName);
      throw new EmailNotSentException();
    }
  }
私有字符串处理模板(字符串模板名称、字符串区域设置){
试一试{
字符串greeting=messageSource.getMessage(“messages.greeting”,null,新语言环境(Locale));
映射模型=新的HashMap();
模特儿。把(“问候语”,问候语);
Template Template=freemarkerConfiguration.getConfiguration().getTemplate(templateName);
返回FreeMarkerTemplateUtils.ProcessTemplateToString(模板,模型);
}捕获(IOException | TemplateException e){
error(“处理模板{}时出错”,templateName);
抛出新的EmailNotSentException();
}
}
我的问题是,是否有更有效的方法以这种方式处理模板?或者最好是模板国际化?
这要看情况而定。如果将这些模板用作主ui呈现器,则将消息国际化是更好的选择。但如果这些模板是用于“发送电子邮件”,我会选择它们的国际化。 在我的应用程序中,我有一个类似的用例,我定义了如下模板:

订单模板-fr.ftl
订单模板es.ftl
订单模板en.ftl

我使用
locale\u CONTRY.toLowerCase()
在运行时根据用户的区域设置解析模板。例如:

String template = "order-template-"+LOCALE_CONTRY.toLowerCase()+".ftl";

如果答案适合您的问题,您可以为其他读者接受。您知道是否有一种方法可以只保留一个模板文件,而不是为每种语言保留一个属性文件-例如lang.properties、lang_de.properties等?在我看来,这将是一个更干净的解决方案。当您管理不同地区的邮件时,您可以轻松做到这一点。我想你已经有了
messages\uuu.properties
文件,所以你可以把你的消息放在那里,然后获取它们,并在呈现之前将它们设置到模板中。这意味着您必须管理messages.properties中的变量。即使可能,我还是更喜欢第一个解决方案,您可以使用Freemarker提供的强大模板功能。