#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());
}
}