SpringBoot+thymeleaf快速实现国际化语言切换

教程大全  / 只看大图  / 倒序浏览   ©

#楼主# 2020-2-16

跳转到指定楼层

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
141532dqz4tp7rt1p7rq7z.jpg

在经济全球化的时代,我们的产品也要走向语言全球化,所以我们不得不考虑让一款产品支持多种语言。

SpringMVC中实现国际化的步骤一般分为以下几步:

1)、编写国际化配置文件

2)、使用ResourceBundleMessageSource管理国际化资源文件;

3)、在页面使用fmt:message取出国际化内容。

SpringBoot已经自动帮助我们装配好国际化的组件,我们只必要进行简朴的配置取值即可。这也是小睿同学为什么热衷于SpringBoot的原因之一。

接下来我就过细的给大家实战演练一番,各位同学你细听分说。

Step1、编写国际化配置文件

resource文件夹中创建i18n文件夹,在i18n文件夹中创建login.propertieslogin_zh_CN.properties文件,随后idea后自动识别该目录下是国际化配置文件,会为我们切换为国际化视图

141533l5deddd4ehqrzdqw.jpg

国际化文件命名规则:由国家语言代码和国家代码构成。下图为在idea中创建英文国际化文件,不会创建的同学可以收藏以下,也可打开电脑实操一下。

141534x63u707465i6w6oo.jpg
141534h4apquaquzuvqiqq.jpg
141535o3b42tmwj2gotno2.jpg

点击ok,创建完毕。

我们已经创建完毕当前项目必要支持的语言,然后点击ResourceBundle。

141535pbvcdvjcbgicgmjm.jpg

点击+号,添加属性(我们必要在HTML页面显示值的变量名)

141535y11b4rw5wa3avywv.jpg

依次填写不同语言下显示的值

141536inr3hjul1r3vnoig.jpg

Step2、在springboot配置文件application.properties中指定国际化资源文件位置。

#配置国际化资源文件基础名spring.messages.basename=i18n.login

有同学就会迷惑,为什么上面这段代码就可以指定项目中国际化资源文件的位置呢?我们可以打开源码,查看MessageSourceAutoConfiguration(信息源自动配置类),小睿已经把源码中的的方法功能进行了注释,方便同学们的阅读。

SpringBoot自动配置好了管理国际化资源文件的组件。

@EnableConfigurationPropertiespublicclassMessageSourceAutoConfiguration{@Bean@ConfigurationProperties(prefix ="spring.messages")//我们的配置文件可以直接放在类路径下叫messages.properties,就可以直接使用国际化功能。//也可以自定义String basename = context.getEnvironment().getProperty("spring.messages.basename","messages");

@BeanpublicMessageSourcemessageSource(MessageSourceProperties properties){ResourceBundleMessageSource messageSource =newResourceBundleMessageSource();if(StringUtils.hasText(properties.getBasename())) {//设置国际化资源文件的基础名(去掉语言国家代码)      messageSource.setBasenames(StringUtils          .commaDelimitedListToStringArray(StringUtils.trimAllWhitespace(properties.getBasename())));    }if(properties.getEncoding() !=null) {      messageSource.setDefaultEncoding(properties.getEncoding().name());    }    messageSource.setFallbackToSystemLocale(properties.isFallbackToSystemLocale());    Duration cacheDuration = properties.getCacheDuration();if(cacheDuration !=null) {      messageSource.setCacheMillis(cacheDuration.toMillis());    }    messageSource.setAlwaysUseMessageFormat(properties.isAlwaysUseMessageFormat());    messageSource.setUseCodeAsDefaultMessage(properties.isUseCodeAsDefaultMessage());returnmessageSource;  }

Step3、取页面获取国际化的值

1、导入thymeleaf的名称空间。

2、使用thymeleaf中提供的标签库

国际化测试

[[#{login.tip}]]

目前有两种实现程序国际化的方法。

方法1、通过浏览器语言设置显示不同的语言信息。

我们可以通过调整浏览器当前的语言,进行语言的切换。

141536ax6wputu7w7pcubf.jpg
141536qhmgj0ighhhgzhra.jpg

原理:国际化Locale(区域信息对象);LocalResolver(获取区域信息对象)

SpringBoot中WebMvcAutoConfiguration自动配置类中localeResolver方法获取浏览器request(请求头)信息。

@Bean@ConditionalOnMissingBean@ConditionalOnProperty(prefix ="spring.mvc", name ="locale")publicLocaleResolver localeResolver() {if(this.mvcProperties.getLocaleResolver() == WebMvcProperties.LocaleResolver.FIXED) {returnnew FixedLocaleResolver(this.mvcProperties.getLocale());      }      AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.mvcProperties.getLocale());returnlocaleResolver;    }

方法2、点击链接切换国际化

    实现方式:通过定义区域信息解析器实现程序国际化

    步骤如下:

    1)、定义区域信息解析器


/** * 在链接上携带区域信息 * 区域信息解析器 */publicclassMyLocaleResolverimplementsLocaleResolver{/**    * 解析区域信息    **@paramrequest 请求头*@returnLocale    */@OverridepublicLocaleresolveLocale(HttpServletRequest request){String l = request.getParameter("l");Locale locale = Locale.getDefault();//操纵系统默认的值if(!StringUtils.isEmpty(l)) {//请求头中l参数如果不为空String[] split = l.split("_");locale =newLocale(split[0], split[1]);        }returnlocale;    }@OverridepublicvoidsetLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale){    }}

    2)、在容器中注册区域信息解析器

//使用WebMvcConfigurerAdapter可以扩展SpringMVC的功能@ConfigurationpublicclassMyMvcConfigextendsWebMvcConfigurerAdapter{@Bean//为了让区域信息解析器生效,将区域信息解析器注册在容器中publicLocaleResolverlocaleResolver(){returnnewMyLocaleResolver();    }}

    3)、HTML内设置超链接

中文English

启动项目,访问/index,效果图如下。

141537v1555turmm11ft11.jpg
141537ms131yw99al3onsm.jpg

综上所述,以上两种实现方法,第二种略显得人性化一些,我们可以随时切换网页中的语言种类。这也是平常在项目中用的最多的一种方法。

精彩文章推荐:

把握内网穿透,家里废弃的手机也可以变成服务器

今天我嫖了阿里云700多元的服务器!

我是 郭小睿同学

欢迎加我微信

备注姓名+技术or方向+学习or公司

拉你进学习交流群

141538pg7f6pffksypf7uy.jpg
141538zpksj9cnscknnpcq.jpg

对你有帮助,点个赞!

让更多人受益~

分享淘帖
回复

使用道具

您的回复是对作者最大的奖励

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于作者

hu6221099

新手猿

  • 主题

    2

  • 帖子

    2

  • 关注者

    0

Archiver|手机版|小黑屋|云大陆 | 赣ICP备18008958号-4|网站地图
Powered by vrarz.com!  © 2019-2020版权所有云大陆