前言
前端页面静态资源一般由前端来做国际化,但是涉及交互、报错、动态提示的是有后端返回的,就由后端处理方便。
正文
1、首先,创建语言包
创建i18n目录,在这个目录下右键,创建resource Bundle
bundle base name作为语言包的前缀,这里写message;
点击+号,添加语言种类,需要填入语言的tag
2、配置生效的语言种类
先通过直接的配置设置默认语言种类,再通过拦截器拦截每次请求重置语言种类
@Configuration
public class LocaleConfig {
//设置默认的语言种类——只调一次(配置)
@Bean
public SessionLocaleResolver localeResolver(){
SessionLocaleResolver localeResolver = new SessionLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
return localeResolver;
}
//注册拦截器——每个请求都根据前端的参数变换 语言种类
@Bean
public WebMvcConfigurer localeInterceptor(){
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//封装好的 按参数lang(这个参数和前端约定) 获取国际化的拦截器, 并装入到locale上下文容器中
LocaleChangeInterceptor localeInterceptor = new LocaleChangeInterceptor();
localeInterceptor.setParamName("lang");
//拦截器注册,自动生效
registry.addInterceptor(localeInterceptor);
}
};
}
}
这里浅讲一下LocaleContextHolder,类似requestContextHolder,是专门用于国际化的上下文容器
3、配置语言包的路径和编码
在application.yml中配置
spring:
messages:
basename: i18n/message
encoding: utf-8
4、创建接口测试
@ApiOperation("测试国际化")
@GetMapping("/localeTest")
public String testLocale(){
//第一个参数是key,第二个是入参,第三个是上下文容器获取的语言种类描述
return Resources.getMessage("helloword","美丽的世界beautiful world!",LocaleContextHolder.getLocale());
}