我在使用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
}
有什麼建議?謝謝!