Я использую следующий класс для управления локализацией в моем приложении весенней загрузки.
@Configuration
public class MessageConfig implements WebMvcConfigurer {
private Logger logger = LoggerFactory.getLogger(MessageConfig.class);
/**
* Message source for localization.
* @return message source.
*/
@Bean
public MessageSource messageSource() {
if (logger.isDebugEnabled()) {
logger.debug("Creating a ResourceBundleMessageSource.");
}
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasename("messages");
source.setUseCodeAsDefaultMessage(true);
return source;
}
/**
* Utility for localization.
* @return locale resolver.
*/
@Bean
public LocaleResolver localeResolver() {
if (logger.isDebugEnabled()) {
logger.debug("Creating a locale resolver.");
}
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.US);
return slr;
}
/**
* Utility for localization.
* @return locale change interpreter.
*/
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
if (logger.isDebugEnabled()) {
logger.debug("Creating a locale change interceptor.");
}
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
if (logger.isDebugEnabled()) {
logger.debug("Adding locale change interceptor to registry.");
}
registry.addInterceptor(localeChangeInterceptor());
}
}
Мое приложение решает, какой языковой стандарт будет использоваться на основе параметра lang URL, отправленного в API.
Когда я отправляю localhost:8080/api
, он отправляет контент на языке по умолчанию, которым является английский sh. Если я отправлю localhost:8080/api?lang=si
, он отправит контент на сингальском языке.
Однако, если я отправлю запрос на localhost:8080/api
без указания языка, я получу контент на сингальском языке, который использовался в предыдущем вызове вместо языкового стандарта по умолчанию. Я использую LocaleContextHolder
на уровне обслуживания, чтобы определить содержимое вывода. Насколько я понимаю, каждый отдельный вызов API будет обрабатываться новым потоком. Итак, почему языковой стандарт по умолчанию был изменен на 'si' в этом вызове API, даже если я не указал язык?