SpringBoot实现任意切换语言功能

SpringBoot,thymeleaf实现点击切换语言

首先在application.properties配置文件内 配置基础国际化文件的位置

  1. 编写国际化文件:
    文件路径:
    在这里插入图片描述
    language.properties(基础文件)
login=登录
username=用户名
password=密码

language_zh_CN.properties(中文)

login=登录
username=用户名
password=密码

language_en_US(美式英语)

login=login
username=username
password=password

然后在application.properties 配置基础国际化文件路径

spring.messages.basename=static.message.language  

然后在html内通过 #{xxx}引入国际化中的配置

这样springBoot就能根据 浏览器中的语言 任意切换语言
例:如果你浏览器语言设置为 美式英语 那么#{login}就从 language_en_US.properties内引入值

原理是 springBoot 的 WebMvcAutoConfiguration 配置类内配置了一个LocaleResolver(区域解析器)

思路: 前端页面提供a标签 用户点击a标签想服务器发请求 带上要切换的语言(格式为 zh_CN)
后台通过request.getParameger 获得语言信息 产生新的语言地区
实现语言的切换

前端页面

<div align='center' >
		<h2>[[#{login}]]</h2>   <!--#{login} 表示引入国际化文件的login值 -->
		<h3 th:text='${message}'></h3>
		<form th:action='@{/logtest}' method='POST'>
			用户名:<input type='text' name='username' th:placeholder="#{username}"/>
			密码  :<input type='password' name='password' th:placeholder="#{password}" />
			<input type='submit' value='提交'/>
		</form>
		</br>
		<a th:href='@{/login(lg=zh_CN)}'>中文</a> &nbsp;|&nbsp;
		<a th:href='@{/login(lg=en_US)}'>英文</a>
	</div> 

后端:
1.编写 自己的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;
		}

他能自动根据你浏览器设置的语言自动切换地区

我们可以配置自己的 区域解析器 代替默认的 从而实现 用户自由切换语言的功能

代码:

public class LocaleConfig implements LocaleResolver{ //实现LocaleResolver接口
	@Override
	public Locale resolveLocale(HttpServletRequest request) { 
		Locale locale = Locale.getDefault(); //获取默认的地区
		 if(request.getParameter("lg")!=null) {  //如果能获取到 说明用户要指定语言
			 String str = (String)request.getParameter("lg"); //获取用户选择的语言 
			String[] temp = str.split("_");  //分割下字符串
			locale  = new Locale(temp[0],temp[1]);//产生新的Locale
			 request.getSession().setAttribute("lg",locale ); //将Locale对象放入session 作为默认的语言地区
		 }
		 //如果用户没指定语言 从session获取默认的语言地区
		if(request.getSession().getAttribute("lg")!=null) {
			return (Locale)request.getSession().getAttribute("lg");
		}
		return locale ; //返回语言地区
	}

	@Override
	public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
		
	}

}
  1. 将 LocaleResolver 放入spring容器中
@Configuration
public class MvcConfig implements WebMvcConfigurer{
	@Bean(name = "localeResolver")
	public LocaleResolver localeResolver() { //注意bena的名字必须为localeResolver
		return new LocaleConfig();
	}

这样就实现了 点击a标签任意切换语言的功能了 非常简单

效果:
在这里插入图片描述

posted @ 2019-09-05 13:31  gudian  阅读(291)  评论(0)    收藏  举报