SpringBoot: программный доступ к настраиваемому сообщению проверки i18n - PullRequest
0 голосов
/ 06 августа 2020

Простая проблема: я работаю над веб-сайтом Spring Boot с 3 языковыми версиями, я интернационализировал сообщения, используя messages_xx.properties, где xx - языковой префикс, и следующий код:

    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(Locale.US);
        return slr;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
        lci.setParamName("lang");
        return lci;
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(localeChangeInterceptor());
    }

Это прекрасно работает. Затем, для простоты, я также создал ValidationMessages_xx.properties для проверки, и он тоже отлично работает. Проблема возникает, когда мне нужно получить программный доступ к какому-либо сообщению из ValidationMessages, например:

        if (!userDto.getPassword().equals(userDto.getRepeatPassword())) {
            bindingResult.rejectValue("repeatPassword", "error.repeatPassword", "custom.validation.passwordsDontMatch.message");
        }

Проблема заключается в третьем параметре rejectValue - мне нужно как-то заменить здесь сообщение из ValidationMessages. Но приведенный выше код возвращает только буквальную строку «custom.validation.passwordsDontMatch.message», хотя редактор идей показывает, что он «видит» правильное сообщение от ValidationMessages здесь, когда я помещаю курсор на строку. Это тоже не работает:

bindingResult.rejectValue("username", "error.username", "${custom.validation.passwordsDontMatch.message}");

Как мне получить доступ к строке custom.validation.passwordsDontMatch.message из класса Java?

1 Ответ

1 голос
/ 06 августа 2020
ResourceBundle bundle = ResourceBundle.getBundle("ValidationMessages", LocaleContextHolder.getLocale());
String value = bundle.getString("custom.validation.passwordsDontMatch.message");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...