Зачем мне Spring Boot `messages.properties` вместо просто` messages_en.properties`? - PullRequest
0 голосов
/ 19 ноября 2018

Я следую этому руководству , и в нем говорится называть файл сообщений по умолчанию messages.properties. Почему я не могу назвать его messages_en.properties и установить язык по умолчанию на английский?

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver slr = new SessionLocaleResolver();
    slr.setDefaultLocale(Locale.ENGLISH);
    return slr;
}

Это не работает (приходится жестко останавливать и перезапускать сервер каждый раз, когда message.properties переименовывается - динамическая перезагрузка не в состоянии принять изменения). Он напечатает default текст с тегом вроде <spring:message code="oops" text="default"/>, потому что не может найти messages_en.properties.

На самом деле, когда я устанавливаю в браузере язык по умолчанию на французский и у меня есть messages_fr.properties и перезагружаю сервер, он также не может найти ключи для французского языка.

Не использует Thymeleaf. Нет необходимости разрешать выбор языка пользователем.

Ссылка: https://docs.spring.io/spring-boot/docs/1.5.17.RELEASE/reference/htmlsingle/ (Только один пример мировой «интернационализации» и только в отношении свойств приложения).

1 Ответ

0 голосов
/ 19 ноября 2018

Я исправил это, используя AcceptHeaderLocaleResolver.

@Bean
public LocaleResolver localeResolver() {
    AcceptHeaderLocaleResolver ahlr = new AcceptHeaderLocaleResolver();
    ahlr.setDefaultLocale(Locale.ENGLISH);
    return ahlr;
}

Я думал, что руководство говорит, что будет искать локаль в сеансе, cookie или заголовке, но они только говорили, что разные подклассы реализуют эти функции отдельно.

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

Я исправил проблему оперативной перезагрузки, установив это свойство приложения , по крайней мере для отладки:

spring.messages.cache-seconds=1

Я также установил это свойство, чтобы не загромождать мою папку src/main/resources, чтобы я мог переместить все файлы сообщений в подкаталог locales/.

spring.messages.basename=locales/messages
...