La configuration regional de Spring Boot Controller no cambia con el parámetro

Estoy teniendo problemas con el uso de Spring Boot con Kotlin para manejar el entorno local. Creé estas configuraciones en mi file application.properties:

spring.messages.basename=messages/messages spring.messages.cache-seconds=-1 spring.messages.encoding=UTF-8 

Luego creé una instancia de AutoSet de MessageSource en mi controller:

 @Autowinetworking lateinit var messageSource: MessageSource 

Cuando pongo una configuration regional en la url como parámetro, el parámetro no parece recogido cuando llamo a LocaleContextHolder.getLocale() , por lo que siempre es en_US. Sin embargo, puedo recogerlo manualmente usando @RequestParam(value="locale") locale: Locale como un parámetro para mi function de controller y usarlo desde allí en la function del controller, pero no en otras funciones. Pensé que el arranque de spring LocaleContextHolder debía contener la configuration regional actual en function de la URL de request automáticamente para toda la session.

Leí un artículo anterior que mencionaba usar un bean LocaleChangeInterceptor y beans para MessageSource y LocaleResolver en tu class principal, pero otro artículo decía que Spring Boot no lo requería. Lo intenté de todos modos sin ninguna diferencia. Estas son las funciones que utilicé:

 @Bean open fun localeResolver(): LocaleResolver { val slr = SessionLocaleResolver() slr.setDefaultLocale(Locale.US) return slr } @Bean open fun localeChangeInterceptor(): LocaleChangeInterceptor { val localeChangeInterceptor = LocaleChangeInterceptor() localeChangeInterceptor.paramName = "locale" return localeChangeInterceptor } @Bean open fun messageSource(): ResourceBundleMessageSource { val source = ResourceBundleMessageSource() source.setBasenames("messages/messages") source.setDefaultEncoding("UTF-8") return source } 

¿Alguna sugerencia sobre qué probar luego de capturar la configuration regional manualmente y convertirla en un parámetro en cada function que el controller llama? ¡Gracias!

OK, parece que la pieza faltante fue la implementación de un WebMvcConfigurerAdapter , la configuration de un bean SessionLocaleResolver , y la anulación de la function addInterceptors para agregar manualmente mi LocaleChangeInterceptor . Usé una class de configuration separada para hacer esto.

 @Configuration open class CustomWebMvcConfigurerAdapter : WebMvcConfigurerAdapter() { //internationalization beans @Bean open fun localeResolver(): LocaleResolver { val slr = SessionLocaleResolver() slr.setDefaultLocale(Locale.US) return slr } @Bean open fun localeChangeInterceptor(): LocaleChangeInterceptor { val localeChangeInterceptor = LocaleChangeInterceptor() localeChangeInterceptor.paramName = "locale" return localeChangeInterceptor } override fun addInterceptors(registry: InterceptorRegistry?) { registry?.addInterceptor(localeChangeInterceptor()) super.addInterceptors(registry) } } 

Supongo que lo malentendí, pensando que Spring Boot manejó el LocaleChangeInterceptor por sí mismo si creaste el bean correcto, pero supongo que aún WebMvcConfigurerAdapter anular un WebMvcConfigurerAdapter y forzar al interceptor allí. Si me perdí algo y alguien tiene una solución más limpia, estaría encantado de darle la respuesta aceptada ya que lo que estoy haciendo aquí se siente como una solución desorderada.