Проблема с интернационализацией в Spring Boot не работает в файле конфигурации

#java #spring #spring-boot #internationalization

#java #spring #spring-boot #интернационализация

Вопрос:

В настоящее время я работаю над веб-приложением, использующим Spring boot (включая spring security). На данный момент я пытаюсь интегрировать поддержку интернационализации для языка по умолчанию русский для начала. Это файл конфигурации, в который я пишу, чтобы получать сообщения на русском языке, если пользователь ввел неправильные данные и т.д. но этот код возвращает меня на английском

 import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;

@Configuration

public class ConfigForAuth {
    @Bean
    public LocaleResolver localeResolver() {
        SessionLocaleResolver slr = new SessionLocaleResolver();
        slr.setDefaultLocale(new Locale("ru"));
        return slr;
    }

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource rs = new ReloadableResourceBundleMessageSource();
        rs.addBasenames("classpath:i18n/messages");
        rs.addBasenames("classpath:/org/springframework/security/messages_ru.properties:1");
        rs.setDefaultEncoding("UTF-8");
        rs.setUseCodeAsDefaultMessage(true);
        return rs;
    }

    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor() {
        LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
        localeChangeInterceptor.setParamName("locale");

        return localeChangeInterceptor;
    }
}
  

Но если я напишу этот же код в файле приложения, этот код отлично работает и возвращается ко мне в RU
Файл приложения:

 @SpringBootApplication
@ComponentScan("--.--.--")//conf
@EnableCaching
@PropertySources({
        @PropertySource("classpath:application.properties"),
        @PropertySource("classpath:clients.properties")
})
public class OneBpmAuthApiApplication {

    public static void main(String[] args) {
        SpringApplication.run(OneBpmAuthApiApplication.class, args);
    }
  

Ответ №1:

Я думаю, что предыдущий совет был более или менее правильным, просто вам нужно установить ParamName в «lang» вот так:

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

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

также, пожалуйста, не забудьте расширить WebMvcConfigurer.

Комментарии:

1. Я тоже пробовал подобное, но не сработало. Я не понимаю, почему это не работает, но работает в файле приложения

2. попробуйте отправить get-запрос на localhost с ?lang=ru таким образом: localhost:8080?lang=ru

3. да, но если вам нужно изменить это вручную, но я хочу, чтобы по умолчанию это было на русском

4. Я просто хотел убедиться, что проблема в настройках по умолчанию и что перехватчик работает нормально.

Ответ №2:

Попробуйте расширить из WebMvcConfigurerAdapter и добавить перехватчики.

 
@Configuration
public class ConfigForAuth extends WebMvcConfigurerAdapter {

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

}