spring 引导项目中的多元化问题

Pluralization issues within spring boot project

目前我正在使用 Spring-boot + Thymeleaf 和多种语言。我找不到任何简单的方法来使用这些 ICU4j。本质上,正如我所了解的,所有需要做的就是用 ICU4J 变体替换 ResourceBundleMessageSource 及其 MessageFormat 。但是我不能让它一起工作。

也许 Spring(例如 this)中有一些此类项目的示例或复数功能的任何其他示例。

对于典型的 Spring Boot 2 + Thymeleaf 项目,它可以通过 this project 和以下配置实现:

@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;
}

您还需要从 maven 添加 ICU4J 依赖项。

在你的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").