У меня возникли проблемы с использованием Spring Boot с Kotlin для обработки локали. Я создал эти настройки в моем application.properties файле:Язык загрузки контроллера загрузки не изменяется с параметром
spring.messages.basename=messages/messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8
Затем создал autowired экземпляр MessageSource в мой контроллер:
@Autowired
lateinit var messageSource: MessageSource
Когда поставить локаль в URL в качестве параметра, параметр Безразлично Кажется, меня забирают, когда я звоню LocaleContextHolder.getLocale()
, поэтому он всегда en_US. Хотя, я могу вручную выбрать его, используя @RequestParam(value="locale") locale: Locale
в качестве параметра для моей функции контроллера и использовать его оттуда в функции контроллера, но не в других функциях. Я думал, что весенняя загрузка LocaleContextHolder должна была поддерживать текущую локаль на основе URL-адреса запроса автоматически для всего сеанса.
Я прочитал более старую статью, в которой упоминается использование компонента LocaleChangeInterceptor, а также beans для MessageSource и LocaleResolver в вашем основном классе, но в другой статье сказано, что Spring Boot не требует этого. Я попробовал это в любом случае без разницы. Это функции, которые я использовал:
@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
}
Любые предложения о том, что попробовать следующий кроме захвата локаль вручную и делает его параметров в каждой функции, которая вызывается контроллером? Благодаря!