Интернационализация Java Spring Freemarker для шаблонов - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь сделать интернационализацию для своих шаблонов, но я не уверен, что это наиболее эффективный способ сделать это следующим образом.

Я извлек сообщения в пакет ресурсов и использую метод MessageSource getMessage(String var1, @Nullable Object[] var2, Locale var3), чтобыполучить перевод на основе локали, а затем поместить его в модель и обработать шаблон.

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();
    }
  }

У меня вопрос: есть ли более эффективный способ обработки шаблона таким образом?Или лучше было бы иметь интернационализацию для шаблонов?

1 Ответ

0 голосов
/ 26 июня 2019

Это зависит.Если вы используете эти шаблоны в качестве основных средств визуализации пользовательского интерфейса, лучше использовать интернационализацию сообщения.Но если эти шаблоны предназначены для «отправки по электронной почте», я выберу их интернационализацию.В моем приложении у меня есть похожий вариант использования, и я определил свои шаблоны как:

order-template-fr.ftl, order-template-es.ftl, order-template-en.ftl, ...

Я разрешаю шаблон во время выполненияисходя из локали пользователя, используя LOCALE_CONTRY.toLowerCase().Пример:

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