SpringBoot框架下,使用thymeleaf引擎,实现国际化效果;一键切换配置文件编辑好的国家语言 非浏览器自带的翻译功能
1.前提准备BootStrap框架的静态资源
2.搭建项目,测试环境
-
引入静态资源
编写Controller实现页面跳转
package com.ht.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LoginController {
/**
* 跳转登录页面
* @return
*/
@RequestMapping("/login")
public String goLogin(){
return "login";
}
}
- 静态资源 thymeleaf语法实现连接跳转
<a th:href="@{/login}" class="dropdown-item">Login</a>
3.编写国际化信息配置文件(idea自带的文本批处理器编辑)
-
正常导入静态资源并测试成功后,在resources文件夹下编写国际化信息配置文件
- 配置登录页面内容
login.welcome=欢迎回来
login.tip=登录您的账户使之继续
login.email=邮箱
login.password=密码
login.sign=登录
login.or=或
login.Github=代码仓库
login.GooGle=谷歌
>>>>>>>>>>>login_en_US.properties>>>>>>>>>>>>>>>
login.welcome=Welcome Back!
login.tip=Sign in to your account to continue.
login.email=Email address
login.password=password
login.sign=Sign In
login.or=or
login.Github=Github
login.GooGle=Google
- 国际化信息注入配置
#国际化配置
spring.messages.basename=i18n.login
4.自定义语言编码配置器
package com.ht.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
public class MyResolver implements LocaleResolver {
/**
* 转换语言
* @param request
* @return
*/
@Override
public Locale resolveLocale(HttpServletRequest request) {
// 获取 切换语言请求参数
String language = request.getParameter("l");
// 获取默认语言
Locale locale = Locale.getDefault();
if (!StringUtils.isEmpty(language)){
// 按下划线分割 en _ US
String[] split = language.split("_");
return new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
- MvcConfig下注入SpringBoot中使之自动管理 生效
@Bean // 注入自定义国际化处理组件 SpringBoot 自动接管
public LocaleResolver localeResolver(){
return new MyResolver();
}
- 前端请求参数传递
<a class="btn btn-sm" th:href="@{/login.html(l='zh_CN')}">中文</a>
<span class="text-xs text-uppercase">or</span>
<a class="btn btn-sm" th:href="@{/login.html(l='en_US')}">English</a>