引用:https://blog.csdn.net/DreamsArchitects/article/details/120410107
i18n 来源是 internationalization 的首末字符 i 和 n ,18 为中间的字符数
internationalization:国际化
代码实现:
- 在 i18n 目录下定义资源文件:
messages.properties
messages_en_US.properties
user.login.username=username user.login.password=password
messages_zh_CN.properties
user.login.username= 用户名 user.login.password=密码
- yml
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
- SpringUtils工具类
@Component
public class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware {
private static ConfigurableListableBeanFactory beanFactory;
private static ApplicationContext applicationContext;
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
SpringUtils.beanFactory = beanFactory;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
public static T getBean(String name){
return (T)beanFactory.getBean(name);
}
public static T getBean(Class clz){
return beanFactory.getBean(clz);
}
public static boolean containsBean(String name){
return beanFactory.containsBean(name);
}
public static boolean isSingleton(String name){
return beanFactory.isSingleton(name);
}
}
- MessageUtils获取国际化值:
public class MessageUtils {
public static String message(String code,Object... args){
MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
// 默认的Locale
Locale aDefault = Locale.getDefault();
System.out.println("aDefault = " + aDefault);
System.out.println(LocaleContextHolder.getLocale());
return messageSource.getMessage(code,args, aDefault);
}
}
- 测试:
@SpringBootTest
class MessageApplicationTests {
@Test
void contextLoads() {
String message = MessageUtils.message("user.login.username");
System.out.println("message = " + message);
}
}
遇到的问题:
- No message found under code ‘user.login.username’ for locale ‘en_US’.
解决: 少写了 messages.properties,springboot不会创建 MessageSource实例
引用:https://www.jianshu.com/p/d3697a5e7b35?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation



