模板建站与仿站哪个更好,青海网站建设价格低,建设部网站官网办事大厅,wordpress主题无法更换优质博文#xff1a;IT-BLOG-CN
一、Spring 编写国际化时的步骤
【1】编写国际化配置文件#xff1b; 【2】使用ResourceBundleMessageSource管理国际化资源文件#xff1b; 【3】在页面使用ftp:message取出国际化内容#xff1b;
二、SpringBoot编写国际化步骤
【1】创…优质博文IT-BLOG-CN
一、Spring 编写国际化时的步骤
【1】编写国际化配置文件 【2】使用ResourceBundleMessageSource管理国际化资源文件 【3】在页面使用ftp:message取出国际化内容
二、SpringBoot编写国际化步骤
【1】创建i18n目录并创建login.properties国际化默认配置文件同时创建login_zh_CN.properties系统就会自动识别到是配置国际化。就会切换到国际化视图可以右键 Resource Bundle login——Add——Add Propertie Files To Resource Bundle 快速添加其他国际化文件。 【3】编写国际化配置文件抽取页面需要显示的国际化信息
login.btn登录
login.password密码
login.remember记住我
login.tip请登录
login.username用户名三、国际化原理
【1】进入MessageSourceAutoConfiguration发现SpringBoot自动配置好了管理国际化资源配置文件的组件
ConfigurationProperties(prefix spring.messages)
public class MessageSourceAutoConfiguration {/*** 以逗号分隔的基名列表本质上是完全限定的类路径位置每个都遵循ResourceBundle约定* 并对基于斜线的位置。如果它不包含包限定符例如“org.mypackage”它将从类路径根解析。*/private String basename messages;//我们的配置文件可以直接放在类路径下叫messages.propertiesBeanpublic 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;
}【2】如果有中文需要设置编码格式 【3】如上可知我们需要在配置文件中设置国际化资源的 basename属性
span classhljs-comment# i18n目录下的login文件/span
spring.messages.basenamei18n.login【4】去页面获取国际化值红色部分国际化用#{}链接用{表示}绿色部分效果根据浏览器语言的设置切换国际化。
!DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.orgheadmeta http‐equivContent‐Type contenttext/html; charsetUTF‐8meta nameviewport contentwidthdevice‐width, initial‐scale1, shrink‐to‐fitnometa namedescription contentmeta nameauthor contenttitleSignin Template for Bootstrap/title!‐‐ Bootstrap core CSS ‐‐link hrefasserts/css/bootstrap.min.css th:href{/webjars/bootstrap/4.0.0/css/bootstrap.css} relstylesheet!‐‐ Custom styles for this template ‐‐link hrefasserts/css/signin.css th:href{/asserts/css/signin.css}relstylesheet/headbody classtext‐centerform classform‐signin actiondashboard.htmlimg classmb‐4 th:src{/asserts/img/bootstrap‐solid.svg} srcasserts/img/bootstrap‐solid.svg alt width72 height72h1 classh3 mb‐3 font‐weight‐normal th:text#{login.tip}Please signin/h1label classsr‐only th:text#{login.username}Username/labelinput typetext classform‐control placeholderUsername th:placeholder#{login.username} required autofocuslabel classsr‐only th:text#{login.password}Password/labelinput typepassword classform‐control placeholderPassword th:placeholder#{login.password} requireddiv classcheckbox mb‐3labelinput typecheckbox valueremember‐me/ [[#{login.remember}]]/label/divbutton classbtn btn‐lg btn‐primary btn‐block typesubmit th:text#{login.btn}Sign in/buttonp classmt‐5 mb‐3 text‐muted© 2017‐2018/pa classbtn btn‐sm th:href{/index.html(lzh_CN)}中文/aa classbtn btn‐sm th:href{/index.html(len_US)}English/a/form/body
/html【5】浏览器切换能够实现国际化的原理国际化Locale区域信息对象LocaleResolver获取区域信息对象进入WebMvcAutoConfiguration类SpringBoot配置了默认的localResolve如下
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;
}【6】当点击页面 “中文” or “English” 时切换中英文页面参照4信息。这是我们需要自己写一个Locale并加入容器中。
/*** 可以在连接上携带区域信息*/
public class MyLocaleResolver implements LocaleResolver {Overridepublic 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;}Overridepublic void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}
}【7】将自己写的类加入到IOC容器中方法的名字必须是localeResolver相当于bean的 id。以为默认的localeResolver会判断容器中是否已经存在了localeResolver。
Bean
public LocaleResolver localeResolver(){return new MyLocaleResolver();
}