## 准备工作
先在IDEA中和统一设置的编码问题同时设置tomcat编码格式
file->settinges->File Encodings
配置文件编写
1、我们在resources资源文件下新建一个i18n目录,存放国际化配置文件
2、建立一个login.properties文件,还有一个login_zh_CN.properties;(用于存放中文)
3、我们可以在这上面去新建一个文件;
4弹出如下页面:在再添加一个英文的
5、接下来来编写配置,可以看到idea下面有另外一个视图;
6、 这个视图打开点击 + 号就可以直接添加属性了,新建一个login.password,可以看到边上有三个文件框 可以输入
7、SpringBoot对国际化的自动配置!这里又涉及到一个类:MessageSourceAutoConfiguration
里面有一个方法,SpringBoot已经自动配置好了管理国际化资源文件的组件
ResourceBundleMessageSource;
8、在application.properties中 配置messages的路径;
spring.messages.basename=i18n.login
9、Thymeleaf=,找到message取值操作为:#{…}
10、 根据按钮自动切换中文英文
在WebMvcAutoConfiguration这个类中有一个localeResolver()方法localeResolver()中有一个
AcceptHeaderLocaleResolver 的类
AcceptHeaderLocaleResolver 这个类中有一个方法
public Locale resolveLocale(HttpServletRequest request) {
Locale defaultLocale = this.getDefaultLocale();
// 默认的就是根据请求头带来的区域信息获取Locale进行国际化
if (defaultLocale != null && request.getHeader("Accept-Language") == null) {
return defaultLocale;
} else {
Locale requestLocale = request.getLocale();
List<Locale> supportedLocales = this.getSupportedLocales();
if (!supportedLocales.isEmpty() && !supportedLocales.contains(requestLocale)) {
Locale supportedLocale = this.findSupportedLocale(request, supportedLocales);
if (supportedLocale != null) {
return supportedLocale;
} else {
return defaultLocale != null ? defaultLocale : requestLocale;
}
} else {
return requestLocale;
}
}
}
11、点击链接让我们的国际化资源生效
1、修改一下前端页面的跳转连接:
2、写一个LocaleResolver可以在链接上携带区域信息(写一个处理的组件类!)
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
//前台链接获取请求参数
String language = httpServletRequest.getParameter("language");
if (StringUtils.isEmpty(language)) {
//如果路径上没有国际化语言参数,采用默认的(从请求头中获取)
return httpServletRequest.getLocale();
} else {
//字符串分割
String[] split = language.split("_");
//语言[0]、国家[1]
return new Locale(split[0], split[1]);
}
}
3、要区域化信息能够生效,我们需要再配置一下这个组件!把组件加入ioc容器这样springboot就能自动装配了
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
12、测试.................................