spingboot的国际化支持已经非常的简化了,经过简单配置就可以使用,肥肠的方便
建立配置文件
- 在resources目录下建一个i18n文件夹,并按照如图所示新建3个配置文件(一般情况下支持 汉-英 双语就足够了):
- messages.properties:是默认的配置文件,里面可以不写,但是文件必须存在,否则不能正常使用
- messages_en_US.properties:英文的配置文件
- messages_zh_CN.properties:中文的配置文件
- 然后在配置文件中填写对应的提示信息
配置默认解析器 LocaleResolver ,以及 默认拦截器LocaleChangeInterceptor 用来切换语言
新建配置文件,并添加如下配置
@Configuration
public class LocaleConfig {
/**
* 国际化默认解析器,默认设置为汉语
*/
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return localeResolver;
}
/**
* 默认拦截器 用来设置切换预言的参数为 lang
*/
@Bean
public WebMvcConfigurer localeInterceptor() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
registry.addInterceptor(localeInterceptor);
}
};
}
}
添加国际化工具类
/**
* 国际化工具类
*/
@Component
public class MessageUtils {
private static MessageSource messageSource;
public MessageUtils(MessageSource messageSource) {
MessageUtils.messageSource = messageSource;
}
public static String get(String msgKey) {
try {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
} catch (Exception e) {
e.printStackTrace();
return msgKey;
}
}
}
使用示例
异常信息提示,需要配置默认异常控制器 HandlerExceptionResolver,在自定义的异常信息中根据配置文件中的key值来取对应语言的提示信息
其中的异常key:student.learActive.missing就是配置文件messages_zh_CN.properties中的key
如果没有配置默认异常处理器的话,直接在抛出异常的地方调用MessageUtils.get(“key”)就可以了
同样的实体类中的参数校验异常,通过统一异常处理器进行处理
遇到的默认语言不生效问题
默认配置的汉语,但是测试发现并没有生效,经排查发现,原来是默认语言解析器使用了Locale.CHINESE
而他对应的是中文语言,并没有指定国家
但我的配置文件名是:messages_zh_CN.properties
所以改成如下所以就可以了: