Thymeleaf не отображает правильную строку на странице, но печатает правильно с модели - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь создать веб-страницу, которая показывает текст на другом языке в зависимости от местоположения пользователя. Для этого я использую файлы свойств со строками, которые должны отображаться на каждом языке, и загружаю их как пакет ресурсов, а затем добавляю эти строки в модель, чтобы я мог получить к ним доступ в Thymeleaf. Вот мой код:

@Controller
public class IndexController {

    @GetMapping("/")
    public String index(Model model, Locale locale) {
        ResourceBundle rb = ResourceBundle.getBundle("lang/index", locale);
        addResourceBundleToModel(model, rb);
        System.out.println(model.getAttribute("test2"));
        return "index";
    }

    private void addResourceBundleToModel(Model model,
                                          ResourceBundle resourceBundle) {
        for (String key : resourceBundle.keySet()) {
            model.addAttribute(key, resourceBundle.getString(key));
        }
    }
}

И файл тимелина:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Title</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <a th:text ="#{test2}"></a>
</body>
</html>

Когда я загружаю страницу и печатает model.getAttribute("test2") в консоль, я получаю нужную строку, а именно «ab c» в качестве тестовой строки. Но «ab c» не отображается в браузере, вместо этого я получаю ??test2_en_US??. В чем проблема с моим кодом? Как мне заставить его отображать "ab c" в браузере? Кроме того, я попытался использовать аннотацию @RestController и вернуть model.getAttribute("test2").toString(), и таким образом я получил «ab c» для отображения в браузере, но не могу заставить его работать с Thymeleaf.

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Я нашел проблему. Проблема была в моем файле индекса. html. Вместо использования <a th:text ="#{test2}"></a> со знаком # я изменил его на <a th:text ="${test2}"></a> со знаком доллара. Это исправило проблему и теперь отображает правильные строки.

0 голосов
/ 27 марта 2020

Вам нужно зарегистрировать bean-компонент для вашего ресурса (скажем, messages.properties в вашей папке ресурсов) где-нибудь в вашем классе конфигурации, например:

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setCacheSeconds(10);
    messageSource.setBasename("classpath:messages");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
}

В вашем файле messages.properties укажите значение ключа, подобное это:

welcome.text=Welcome to Thymeleaf Layouts with SpringBoot

Где-то, на ваш взгляд, просто введите подобное:

<h1 th:text="#{welcome.text}"></h1>

Не пробовал ваш код. Но вы можете взглянуть на здесь для рабочего образца. Я просто добавил message.properties и тег th: text в мой html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...