SpringBoot,thymeleaf实现点击切换语言
首先在application.properties配置文件内 配置基础国际化文件的位置
- 编写国际化文件:
文件路径:
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> |
<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) {
}
}
- 将 LocaleResolver 放入spring容器中
@Configuration
public class MvcConfig implements WebMvcConfigurer{
@Bean(name = "localeResolver")
public LocaleResolver localeResolver() { //注意bena的名字必须为localeResolver
return new LocaleConfig();
}
这样就实现了 点击a标签任意切换语言的功能了 非常简单
效果: