1. 国际化
国际化就是我们平时页面上切换中英文的按钮,按下中文按钮,整个页面都显示中文,反之显示英文,当然,也可以做多种语言
1.1 步骤
- 编写国际化配置文件,抽取页面需要显示的国际化消息
先分析页面中什么部分需要国际化
编写国际化配置文件(在资源目录下创建i18n文件夹然后创建对应文件)
然后根据要国际化的内容编写配置
- SpringBoot自动配置好了管理国际化资源文件的组件
到配置文件中修改国际化默认访问的路径@ConfigurationProperties(prefix = "spring.messages") public class MessageSourceAutoConfiguration { /** * Comma-separated list of basenames (essentially a fully-qualified classpath * location), each following the ResourceBundle convention with relaxed support for * slash based locations. If it doesn't contain a package qualifier (such as * "org.mypackage"), it will be resolved from the classpath root. */ private String basename = "messages"; //我们的配置文件可以直接放在类路径下叫messages.properties; @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); if (StringUtils.hasText(this.basename)) { //设置国际化资源文件的基础名(去掉语言国家代码的) messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray( StringUtils.trimAllWhitespace(this.basename))); } if (this.encoding != null) { messageSource.setDefaultEncoding(this.encoding.name()); } messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale); messageSource.setCacheSeconds(this.cacheSeconds); messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat); return messageSource; }
spring.messages.basename=i18n.login
- 去页面获取国际化的值
运行
因为我们浏览器默认设置显示中文(根据浏览器语言设置的信息切换了国际化),我们只需到浏览器的设置中调整语言优先级即可
如果运行后显示乱码,去idea-setting-file encoding 设置
1.2 原理
默认的就是根据请求头带来的区域信息获取Locale进行国际化(国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象))
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "spring.mvc", name = "locale")
public LocaleResolver localeResolver() {
if (this.mvcProperties
.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {
return new FixedLocaleResolver(this.mvcProperties.getLocale());
}
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(this.mvcProperties.getLocale());
return localeResolver;
}
1.3 实现点击链接切换国际化
先修改首页的国际化按钮,使其按下之后携带超链接参数l
自己编写区域信息解析器component.MyLocaleResolver
(注意:StringUtils
用的是org.springframework.util
)
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
String l=request.getParameter("l");
Locale locale= Locale.getDefault();
if(!StringUtils.isEmpty(l)){
//分割,得到zh/en和CN/US
String[] split=l.split("_");
locale=new Locale(split[0],split[1]);
}
//如果获取的l为空,则返回默认的Locale
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
在配置类中将 MyLocaleResolver
添加到容器中
@Bean
public LocaleResolver localeResolver(){//MyLocaleResolver对象组件加到容器中
return new MyLocaleResolver();
}
该SpringBoot学习笔记学习自雷神前辈,是对知识点的整理和自我认识的梳理,如有不当之处,欢迎指出