1.在resources目录下创建i18n目录
2. 在i18n下创建默认的资源文件messages.properties
3. 创建中文资源文件:messages_zh.properties
4. 创建英文资源文件:messages_en.properties
5.编写配置的语句
默认显示、中文显示、英文显示,这里就默认显示中文
6.实现I18nConfig配置
public class I18nConfig implements WebMvcConfigurer {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
//设置默认语言,中文
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
//参数名与前端changeLanguages方法携带参数名一致
lci.setParamName("lang");
return lci;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
}
}
7.spring工具类 方便在非spring管理环境中获取bean
@Component
public class SpringUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String beanId) {
return (T) applicationContext.getBean(beanId);
}
public static <T> T getBean(Class<T> requiredType) {
return (T) applicationContext.getBean(requiredType);
}
/**
* Spring容器启动后,会把 applicationContext 给自动注入进来,然后我们把 applicationContext 赋值到静态变量中,方便后续拿到容器对象
*
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringUtils.applicationContext = applicationContext;
}
}
8.配置MessageUtils工具类
public class MessageUtils {
/**
* 根据消息键和参数 获取消息 委托给spring messageSource
* @param code 消息键
* @param args 参数
* @return 获取国际化翻译值
*/
public static String message(String code, Object... args)
{
MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
}
}
9.controller层
@Api(tags = "语言国际化切换")
@RestController
@RequestMapping("hmsplatform/api/language")
public class LanguageController {
@GetMapping("/changeLanguages")
public R changeLanguages(String lang) {
return R.ok();
}
/**
* 测试接口--后端根据前端设置的语言返回相应语言的文字 MessageUtils.message("addSuccess")
* @return
*/
@GetMapping("/test")
public R test(){
System.out.println(MessageUtils.message("addSuccess"));
return R.ok(MessageUtils.message("addSuccess"));
}
}
中文环境时:
切换为英文语言环境: