#java #internationalization #thymeleaf
#java #интернационализация #thymeleaf
Вопрос:
В этом сценарии нет веб-конфигурации, нет Spring MVC, Нет Spring Boot и т.д. Просто чистое приложение, я хотел бы использовать Thymeleaf для передачи статического html-ресурса и получения содержимого в виде строки.
Однако, в этом случае, как установить международное сообщение для thymeleaf? Итак, я мог бы в статическом html-файле использовать как
<h1 th:text="#{messageA}">AAAAA</h1>
Ответ №1:
Вам просто нужно определить источник сообщения. Например, в моей конфигурации spring у меня есть метод main:
@Configuration
@ComponentScan(basePackages = {"spring.cli.config"})
public class Main {
public static void main(String... args) throws Exception {
ConfigurableApplicationContext spring = new SpringApplicationBuilder(Main.class)
.web(NONE)
.profiles("default")
.run(args);
TemplateEngine engine = (TemplateEngine) spring.getBean("engine");
Context context = new Context();
System.out.println(engine.process("template", context));
}
}
и файл конфигурации (отсканированный в @ComponentScan(basePackages = {"spring.cli.config"})
):
@Configuration
public class Thymeleaf {
@Bean
public MessageSource messageSource() throws Exception {
ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
res.setBasename("file:src/main/resources/messages");
return res;
}
}
У меня есть файл в моем проекте src/main/resources/messages.properties
.
# messages.properties
messageA=Hello I am message A
И в html:
<h1 th:text="#{messageA}">AAAAA</h1>
решает:
<div>Hello I am message A</div>
Комментарии:
1. Для тех, кто застрял здесь, у нас есть другой вариант:
engine.setMessageSource( this.messageSource );
гдеthis.messageSource
может быть автоматически сконфигурированный компонент из Spring Boot (@Autowired MessageSource messageSource
)