【发布时间】:2021-07-06 11:55:29
【问题描述】:
这里是 Spring Boot/Thymeleaf。试图让国际化与我的电子邮件模板一起工作并遇到麻烦。
在我的配置中,我指定了以下 bean:
@Configuration
public class ThymeleafConfig {
@Autowired
public void configureTemplateEngine(TemplateEngine templateEngine, ITemplateResolver templateResolver) {
templateEngine.addTemplateResolver(templateResolver);
}
@Bean
public ITemplateResolver templateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setOrder(Integer.valueOf(2));
templateResolver.setResolvablePatterns(Collections.singleton("html/*"));
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding("UTF-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public LocaleResolver localeResolver() {
AcceptHeaderLocaleResolver acceptHeaderResolver = new AcceptHeaderLocaleResolver();
acceptHeaderResolver.setDefaultLocale(Locale.US);
return acceptHeaderResolver;
}
}
所以我们使用Accept-Header 中指定的语言环境(如果未指定,则默认为美国),这正是我想要的。
但是在发送前创建电子邮件对象时:
final MimeMessage mimeMessage = this.mailSender.createMimeMessage();
final MimeMessageHelper message =
new MimeMessageHelper(mimeMessage, true, "UTF-8");
message.setSubject("This is my email");
message.setFrom("thymeleaf@example.com");
message.setTo(recipientEmail);
我也希望能够将电子邮件主题国际化。我可以使用标准的 Java 国际化资源包,但这需要我根据请求上的 Accept-Header 指定 Locale...那么我该如何动态访问它?
我想我可以在我的控制器/资源类中获取@RequestHeader("Accept"),然后将其传递给发送电子邮件的方法,但我想知道 Spring/Thymlead 是否提供更简洁的方式来访问该值?
【问题讨论】:
标签: java spring-boot internationalization thymeleaf