通过MessageSource接口实现国际化
国际化简单来说就是在不修改内部代码的情况下,根据不同语言及地区显示相应的语言。
加载ApplicationContext时,自动搜索上下文中定义的MessagesSource Bean(名称必须为messageSource)。如果无法找到消息的任何源,则实例化一个空的messageSource。
/* 注入MessageSource */
@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource source = new ResourceBundleMessageSource();
source.setBasenames("i18n/message");
return source;
}
在类路径下的i18n下创建message_zh_CN.properties、message_en_US.properties
message_en_US.properties内容
argument.required=The {0} argument is required.
message_zh_CN.properties内容
argument.required=需要参数:{0}!
这两个文件表示US和CN地区显示的消息,如果想添加更多,新建message_xxx.properties即可,具体可查看Java.util.Locel类
测试效果:
/* The loginName argument is required. */
System.out.println(context.getMessage("argument.required",
new Object[]{"loginName"}, Locale.US));
/* 需要参数:登录名! */
System.out.println(context.getMessage("argument.required",
new Object[]{"登录名"}, Locale.getDefault()));