У меня есть приложение Spring Boot (2.1.3.RELEASE
), которое использует Джерси для определения (RESTful) конечных точек. Я пытаюсь прочитать и распространить некоторые сообщения в зависимости от локали, которую отправляют пользовательские агенты.
Я настроил эти бины:
@Bean
public LocaleResolver localeResolver() {
final AcceptHeaderLocaleResolver resolver = new AcceptHeaderLocaleResolver();
resolver.setSupportedLocales(Arrays.asList(Locale.GERMANY, Locale.US));
resolver.setDefaultLocale(Locale.ENGLISH);
return resolver;
}
@Bean
public MessageSource messageSource() { // Not sure if this is needed
final ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setDefaultEncoding(StandardCharsets.UTF_8.name());
messageSource.setBasenames("classpath:/messages");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setCacheSeconds(5);
return messageSource;
}
... а также связки (внутри ../src/main/resources/
), такие как: messages.properties
(запасной вариант), messages_en_US.properties
, messages_de_DE.properties
и т. Д.
Теперь проблема в том, что я не уверен, как «прочитать» локаль, отправленную пользовательскими агентами, чтобы правильно прочитать сообщения из пакетов. Я внедряю MessageSource ms
и программно читаю сообщения типа:
final Locale locale = ???
ms.getMessage("message.duplicate-token", null, locale);
Есть какие-нибудь подсказки?
Я пробовал LocaleContextHolder.getLocale()
, но всегда en_US
. Если я жестко закодирую соответствующую локаль для вызова getMessage
, я смогу получить правильное сообщение (я). Так что я знаю, что настройка / настройка по большей части работает.
Клиенты отправляют локаль, используя заголовок Accept-Language
- и такие значения, как: de-DE
, en-US
и т. Д.