我在使用Spring Boot和Kotlin来处理语言环境时遇到了一些麻烦。我在application.properties文件中创建这些设置:Spring Boot Controller的语言环境不能改变参数
spring.messages.basename=messages/messages
spring.messages.cache-seconds=-1
spring.messages.encoding=UTF-8
然后在我的控制器中创建的MessageSource的自动装配Autowired实例:
@Autowired
lateinit var messageSource: MessageSource
当把一个区域的URL作为参数,参数没有按当我打电话给LocaleContextHolder.getLocale()
时,它似乎不会被拿起,所以它总是en_US。尽管如此,我可以使用@RequestParam(value="locale") locale: Locale
作为我的控制器功能的一个参数来手动提取它,然后在控制器功能中使用它,但不能在其他功能中使用它。我认为春季启动LocaleContextHolder应该为整个会话自动保存基于请求URL的当前语言环境。
我读了一篇较早的文章,提到在主类中使用LocaleChangeInterceptor bean以及MessageSource和LocaleResolver的bean,但另一篇文章说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
}
有什么建议?谢谢!