Проблемы плюрализации в весеннем загрузочном проекте

В настоящее время я использую 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"),

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