Thymeleaf устанавливает ресурс сообщения без ВЕБ

#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 )