注意:本文介绍的 ResourceBundleMessageSource 只能从classpath下加载资源文件。要想自定义资源文件的位置,可以使用 ReloadableResourceBundleMessageSource。
- classpath路径下的资源文件
文件名: format.properties
文件内容: message.source.name=Jack
文件名: format_zh_CN.properties
文件内容: message.source.name=杰克
文件名: format_en_US.properties
文件内容: message.source.name=Jack
- 配置和资源文件对应的bean
@Configuration
public class MessageSourceConfig {
/**
* {@link ResourceBundleMessageSource} 只能从 classpath 中加载资源文件
*
* 但是 {@link org.springframework.context.support.ReloadableResourceBundleMessageSource}
*
* 可以自定义资源文件的位置
*
* @return 国际化消息资源
*/
@Bean(name = {"testMessageSource"})
public ResourceBundleMessageSource messageSource() {
ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource();
// 指定资源文件前缀,资源文件必须在 classpath 下
resourceBundleMessageSource.addBasenames("format");
return resourceBundleMessageSource;
}
}
- 打印日志
@Component
public class MessageSourceTest {
private static final Logger logger = LoggerFactory.getLogger(MessageSourceTest.class);
private ResourceBundleMessageSource messageSource;
@Autowired
public MessageSourceTest(ResourceBundleMessageSource messageSource) {
this.messageSource = messageSource;
}
/**
* {@link PostConstruct} 这个注解在这里没用,只是为了方便测试,打印日志,查看国际化资源是否加载成功
*/
@PostConstruct
public void verifyMessageResource() {
// 英文资源
logger.info("MessageSource : {}",
messageSource.getMessage("message.source.name", null, Locale.US));
// 中文资源
logger.info("MessageSource : {}",
messageSource.getMessage("message.source.name", null, Locale.SIMPLIFIED_CHINESE));
}
}
- 查看资源文件中的消息是否被成功加载