Установка базовых имен на основе заголовков запросов в ReloadableResourceBundleMessageSource

У меня есть приложение для весенней загрузки, которое имеет следующие сообщения вне 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

0
0
42
1

Ответы 1

Чтобы наше приложение могло определить, какая локаль используется в настоящее время, нам нужно добавить 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, который идеально соответствует вашим потребностям.

Другие вопросы по теме