Проблемы плюрализации в весеннем загрузочном проекте
В настоящее время я использую Spring-boot + Thymeleaf и несколько языков. Я не могу найти простой способ использовать ICU4j с ними. По сути, как я понимаю, все, что нужно, это заменить ResourceBundleMessageSource
И его MessageFormat
с вариантом ICU4J. Но я не могу заставить это работать вместе.
Может быть, есть некоторые примеры таких проектов или любые другие примеры функциональности плюрализации в Spring (такие как эта).
1 ответ
С типичным проектом Spring Boot 2 + Thymeleaf это может быть достигнуто с помощью этого проекта и следующего конфига:
@Configuration
public class YourConfigFile ...
@Bean
public ICUMessageSource messageSource() {
ICUReloadableResourceBundleMessageSource messageSource = new ICUReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages/messages");
messageSource.setCacheSeconds(3600);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
Вам также необходимо добавить зависимость ICU4J от maven.
В ваших messages.properties (messages_ru.properties в моем случае):
plural={0} {0, plural, one{пользователь}few{пользователя}other{пользователей}}
С помощью:
<span th:text="#{plural(0)}"></span>
<span th:text="#{plural(1)}"></span>
<span th:text="#{plural(2)}"></span>
<span th:text="#{plural(10)}"></span>
Если у вас возникли проблемы с поиском messages.properties, прекратите получать ошибки, такие как ??plural_ru??
, проверьте свое местоположение и имена для этих файлов messageSource.setBasename("classpath:messages/messages")
,