Почему мое весеннее загрузочное приложение не отображает messages.properties в шаблонах усов - PullRequest
0 голосов
/ 16 января 2019

Я хочу создать весеннее загрузочное веб-приложение с шаблонами усов, которое использует интернационализацию.

Следуя этому руководству https://www.baeldung.com/spring-boot-internationalization Я попробовал мини-пример с gradle и kotlin, который работает с шаблонами из тимьяна, но не работает для усов

Чтобы адаптировать руководство для усов, я сделал следующие изменения:

  1. переключатель implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' с implementation 'org.springframework.boot:spring-boot-starter-mustache'
  2. переименовать international.html в international.mustache
  3. поменять интернациональную усадьбу вот так

    <html> <head> <title>Home</title> </head> <body> <h1>{{#i18n}}greeting{{/i18n}} test</h1> </body> </html>

Файл messages.properties содержит строку greeting=Hello! Welcome to our website!

Просто чтобы предоставить весь необходимый код, вот мой класс конфигурации

@Configuration
@ComponentScan(basePackages = ["com.example.translationtest.config"])
class AppConfig: WebMvcConfigurer {

    @Bean
    fun localeResolver(): LocaleResolver {
        val slr = SessionLocaleResolver()
        slr.setDefaultLocale(Locale.US)
        return slr
    }

    @Bean
    fun localeChangeInterceptor(): LocaleChangeInterceptor {
        val lci = LocaleChangeInterceptor()
        lci.paramName = "lang"
        return lci
    }

    override fun addInterceptors(registry: InterceptorRegistry) {
         registry.addInterceptor(localeChangeInterceptor())
    }
} 

Когда я захожу на страницу в браузере, я вижу только строку test Хотя я бы ожидал увидеть

Hello! Welcome to our website! test

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Добавление Энди Винлкинсон ответ и присоединение к Ротцлуки ожидания Я делюсь тем, что сделал для достижения работы по интернационализации JMustache.

@ControllerAdvice
public class InternacionalizationAdvice {

    @Autowired
    private MessageSource message;

    @ModelAttribute("i18n")
    public Mustache.Lambda i18n(Locale locale){
        return (frag, out) -> {
            String body = frag.execute();
            String message = this.message.getMessage(body, null, locale);
            out.write(message);
        };
    }
}
0 голосов
/ 17 января 2019

JMustache , который используется spring-boot-starter-mustache, не предоставляет никакой поддержки интернационализации "из коробки". {{#i18n}}greeting{{/i18n}} в вашем шаблоне игнорируется, поскольку JMustache не распознает i18n.

Как указано в файле readme, вы можете реализовать поддержку интернационализации, используя Mustache.Lamda:

Вы также можете получить результаты выполнения фрагмента для таких вещей, как интернационализация или кэширование:

Object ctx = new Object() {
    Mustache.Lambda i18n = new Mustache.Lambda() {
        public void execute (Template.Fragment frag, Writer out) throws IOException {
            String key = frag.execute();
            String text = // look up key in i18n system
            out.write(text);
        }
    };
};

// template might look something like:
<h2>{{#i18n}}title{{/i18n}</h2>
{{#i18n}}welcome_msg{{/i18n}}
...