1、在application.properties 添加以下配置:
#国际化配置 spring.messages.basename=i18n/messages/messages spring.messages.fallback-to-system-locale=false
2、添加配置文件在 resources目录下 如下图所示:
这个国际化文件命名有个坑,必须按照小明名称进行 否则部署linux国际化不生效,目前是遇到这个问题,问题修改en_us/zh_cn/es_pa得到解决 。如果有其他方式 ,欢迎留言沟通交流。
3、添加国际化配置文件:
I18nConfig.java
package com.example.cxjgmanagedevice.utils; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.ReloadableResourceBundleMessageSource; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; import org.springframework.web.servlet.i18n.SessionLocaleResolver; import java.util.Locale; @Configuration public class I18nConfig implements WebMvcConfigurer { @Bean public LocaleResolver localeResolver() { SessionLocaleResolver slr = new SessionLocaleResolver(); slr.setDefaultLocale(Locale.US); // 设置默认语言为英语 return slr; } @Bean public ReloadableResourceBundleMessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); messageSource.setBasenames("classpath:i18n/messages/messages"); // 设置基础名,不带后缀 messageSource.setDefaultEncoding("UTF-8"); messageSource.setCacheSeconds(5); // 设置缓存刷新间隔(秒) return messageSource; } @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); localeChangeInterceptor.setParamName("lang"); // 通过URL参数lang来切换语言 registry.addInterceptor(localeChangeInterceptor); } }
4、创建控制类 添加属性:
private final MessageSource messageSource; @Autowired public UserController(MessageSource messageSource) { this.messageSource = messageSource; }
5、在对应接口方法上通过下面方式进行国际化
Locale locale = new Locale(lang); String message = null; if (StringUtils.isBlank(mobile) || StringUtils.isBlank(random)) { message = messageSource.getMessage("1004",null , locale); return ResultCodeDataObj.INFO("1004", message,null); }
6、国际化配置文件
至此:你的国际化流程已经顺利完成,中间过程中,如果有任何问题,欢迎骚扰。