春季引导国际化 ?lang=en 不起作用



我目前正在开发一个使用Spring boot(包括spring安全性(和thymeleaf的Web应用程序。目前,我正在尝试集成对英语和德语语言的国际化支持作为开始。

对于基础知识,我遵循了本教程并尝试让他们的示例工作。 现在,如果我转到 Localhost:8443/international 并选择其中一种语言,URL 将正确构建为 .../international?lang=en。Thymeleaf甚至读取标记为默认值的.propperties文件中的字段。但是无论我做什么,我都无法让它真正切换语言。

法典:

@Configuration
@EnableWebMvc
@EnableAutoConfiguration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(new LogInterceptor()).addPathPatterns("/**");
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}

}

像这样,我假设它采用默认的messages.propperties。但是,如果我将区域解析器Bean放入我的

public class Application extends SpringBootServletInitializer 

类,其中 main 方法,它采用任何设置为默认语言环境的语言。

从我现在所处的位置,我得出结论,我的.propperties文件很好,可以读取,但是LocaleChangeInterceptor的某些东西不能正常工作。我进入了调试模式,但 WebConfig 类中的任何断点都没有触发。

我的一个假设是 Spring 安全搞砸了一些东西,以至于无法解决 ?lang 请求。(已尝试登录和注销(。

如果有人对如何解决问题有一些想法,将非常高兴,感谢提前的每一次回复!

我的应用程序类:

@SpringBootApplication
@EnableMongoRepositories(basePackageClasses = UserRepository.class)
@ComponentScan(basePackages = { "my.company.controller", "my.company.Services", "java.lang.String","my.company.Services.Security" })
@EnableConfigurationProperties(my.company.Services.Storage.StorageProperties.class)
public class Application extends SpringBootServletInitializer {
@Autowired
private UserRepository repository;
@Autowired
private SecUserDetailsService userDetailService;

public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Bean
CommandLineRunner init(StorageService storageService) {
return (args) -> {
repository.deleteAll();
userDetailService.addUser("bob", "ross", "admin");
userDetailService.addUser("1", "1", "superuser");
userDetailService.addUser("2", "2", "admin");
System.out.println("All users currently in DB:");
System.out.println("-------------------------------");
for (User user1 : repository.findAll()) {
System.out.println(user1);
}
System.out.println();
// storageService.deleteAll();
try {
storageService.init();
} catch (StorageException e) {
System.out.println("Ordner schon vorhanden");
}
};
//If i add this here french gets picked as default language, changing does still not work
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.FRENCH);
return slr;
}
}

尝试删除@ComponentScan注释。@SpringBootApplication会自动进行组件扫描。我猜你的 WebConfig 类没有加载。

最新更新