Установка базовых имен на основе заголовков запроса в ReloadableResourceBundleMessageSource - PullRequest
0 голосов
/ 31 октября 2018

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

1 Ответ

0 голосов
/ 31 октября 2018

Чтобы наше приложение могло определить, какая локаль используется в данный момент, нам нужно добавить LocaleResolverbean:

` @ Бин

публичный LocaleResolver localeResolver () {

SessionLocaleResolver slr = new SessionLocaleResolver ();

slr.setDefaultLocale (Locale.US);

return slr;

} `

Интерфейс LocaleResolver имеет реализации, которые определяют текущий языковой стандарт на основе сеанса, файлов cookie, заголовка Accept-Language или фиксированного значения.

Далее нам нужно добавить bean-объект-перехватчик, который будет переключаться на новую локаль на основе значения параметра lang, добавленного к запросу:

` @ Бин

публичный LocaleChangeInterceptor localeChangeInterceptor () {

LocaleChangeInterceptor lci = новый LocaleChangeInterceptor ();

lci.setParamName ( "языки");

return lci;

} `

Для вступления в силу этот компонент должен быть добавлен в реестр перехватчиков приложения. Для этого наш класс @Configuration должен реализовать интерфейс WebMvcConfigurer и переопределить метод addInterceptors ():

` @ Override

public void addInterceptors (реестр InterceptorRegistry) {

registry.addInterceptor (localeChangeInterceptor ());

} `

Если вы прочитаете документацию, вы найдете простейший пример заголовка на языке Accept, который идеально соответствует вашим потребностям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...