【发布时间】:2021-10-10 09:20:16
【问题描述】:
我需要使用 Thymeleaf 模板为不同的语言环境发送电子邮件。
我的 HTML 中有下一部分
<p th:text="#{TEST}"></p>
我有下一个代码
Context context = new Context();
context.setLocale(Locale.GERMAN);
String emailBody = templateEngine.process( "WELCOME", context);
我有下一个豆子
@Bean
public TemplateEngine mailTemplateEngine() {
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.addTemplateResolver(mailTemplateResolver());
templateEngine.addDialect(new LayoutDialect());
templateEngine.setMessageResolver(messageResolver());
return templateEngine;
}
@Bean
public ITemplateResolver mailTemplateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("/templates/email/common/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding(UTF_8.name());
templateResolver.setCheckExistence(true);
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public IMessageResolver messageResolver() {
return new StandardMessageResolver();
}
我正在使用下一个依赖项
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
我在“resources”文件夹中有我需要的每种语言的资源包消息。 如果您使用 ctrl+左键从我的 html 中检查#{TEST},您可以看到它看到了属性文件,因此 IDEA 可以解决它。
当我运行我的应用程序并尝试发送电子邮件时,我得到了下一个结果
??TEST_de??
对于其他所有语言,我得到了类似的结果。
如何解决这个问题?我需要 TemplateEngine 能够根据语言环境获得适当的属性值。
【问题讨论】:
-
使用
SpringTemplateEngine会自动获取基于Spring的MessageSource。 -
SpringTemplateEngine 不是我的选择。当我尝试使用它时,在启动阶段的重定向操作中出现很多错误请求处理失败;嵌套异常是 org.thymeleaf.exceptions.TemplateInputException:解析模板时出错 [redirect],模板可能不存在或可能....
-
@M.Deinum 请将您的答案写成帖子。我会选择它作为答案。