У меня есть приложение для весенней загрузки, которое имеет следующие сообщения вне jar / war
/i18n/myApplication/messages/companyA/messages.properties
/i18n/myApplication/messages/companyA/messages_fr_FR.properties
/i18n/myApplication/messages/companyB/messages.properties
/i18n/myApplication/messages/companyB/messages_fr_FR.properties
/i18n/myApplication/messages/companyB/messages_zh_HK.properties
В заголовке запроса я бы получил следующее
X-Company=CompanyA
Accept-Language=fr-FR
Как мне динамически установить baseNames в зависимости от компании и региона?
Также для CompanyA я не хочу искать сообщения в CompanyB, например: если
X-Company=CompanyA
Accept-Language=zh-HK
Я должен иметь возможность по умолчанию использовать свойства en-IN.
Любая новая компания, которая добавляется, я не хочу вносить какие-либо изменения в код для ее поддержки
Я думал о расширении ReloadableResourceBundleMessageSource
Чтобы наше приложение могло определить, какая локаль используется в настоящее время, нам нужно добавить LocaleResolverbean:
` @Bean
public LocaleResolver localeResolver () {
SessionLocaleResolver slr = новый SessionLocaleResolver ();
slr.setDefaultLocale (Locale.US);
вернуть slr;
} `
Интерфейс LocaleResolver имеет реализации, которые определяют текущий языковой стандарт на основе сеанса, файлов cookie, заголовка Accept-Language или фиксированного значения.
Затем нам нужно добавить bean-компонент-перехватчик, который переключится на новую локаль на основе значения параметра lang, добавленного к запросу:
` @Bean
public LocaleChangeInterceptor localeChangeInterceptor () {
LocaleChangeInterceptor lci = новый LocaleChangeInterceptor ();
lci.setParamName ("язык");
return lci;
} `
Чтобы этот компонент вступил в силу, необходимо добавить его в реестр перехватчиков приложения. Для этого наш класс @Configuration должен реализовать интерфейс WebMvcConfigurer и переопределить метод addInterceptors ():
` @Override
public void addInterceptors (реестр InterceptorRegistry) {
registry.addInterceptor (localeChangeInterceptor ());
} `
Если вы прочтете документацию, вы найдете простейший пример заголовка на языке Accept, который идеально соответствует вашим потребностям.