国际化:
以前springmvc时:
1),编写国际化配置文件
2),使用ResourceBundleMessageSource管理国际化资源文件
3),在页面使用fmt:message取出国际化内容
springboot国际化步骤
1),编写国际化配置文件,抽取页面需要的国际化消息
三个国际化配置文件:
login.properties 没有指定语言信息的时候默认的
login_en_US.properties 英文
login_zh_CN.properties 中文
2),springboot自动配置好了管理国际化资源文件的组件在MessageSourceAutoConfiguration类中
用@Bean给容器中添加了一个:管理国际化资源文件的组件:MessageSource(ResourceBundleMessageSource)
ResourceBundleMessageSource需要调用一个方法是.setBasenames
.setBasenames:设置国际化资源文件的基础名(去掉语言国家代码)
3)页面获取国际化的值:
#{…}:取国际化信息
设置完访问时出现乱码
解决:File–>Other Settinfs–>Default Settings把Detault:encoding for properties files改成UTF-8勾选
后面的默认框全局默认设置
效果:根据浏览器语言信息切换国际化
怎么实现点按钮切换语言?
原理:
国际化之所以有效果是因为有一个对象Locale(区域信息对象);springmvc里所有要获取区域对象的时候有一个组件Resolver(获取区域信息对象)
springboot默认配置区域信息解析器在WebMvcAutoConfiguration类中
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(
prefix = "spring.mvc",
name = {"locale"}
)
public LocaleResolver localeResolver() {
if (this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.WebMvcProperties.LocaleResolver.FIXED) {
return new FixedLocaleResolver(this.mvcProperties.getLocale());
} else {
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
return localeResolver;
}
}
默认的区域信息解析器就是根据请求头带来的区域信息获取Locale进行国际化
点击链接切换国际化
写一个LocaleResolver
/**
* 可以在链接上携带区域信息
*/
public class MyLocaleResolver implements LocaleResolver{
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l= request.getParameter("l");
Locale locale=Locale.getDefault();
if (!StringUtils.isEmpty(l)){
String[] split= l.split("_");
locale = new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
点击链接切换国际化怎么知道?
可以在链接上携带国际化的区域信息比如在login.html里
这样就是点链接就发送这个请求发请求的时候就会带上这个国际化的值
自己在MyLocaleResolver里面写一个区域信息解析器
然后在MyMvcConfig配置类里添加组件LocaleResolver
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
登录
模板引擎页面修改以后,要实时生效
1)在配置文件里禁用模板引擎缓存
2)页面修改完成后Ctrl+F9:重新编译