SpringBoot---Thymeleaf的国际化 (详细,从新建项目开始)
Thymeleaf的国际化
1、创建一个SpringBoot工程,明明为I18n-demo,选择Thymeleaf和SpringBoot-Web启动器。该工程的目录结构如下图所示:

2、编写MyLocalResovel.java ,实现LocaleResolver接口
@Configuration public class MYLocalResovel implements LocaleResolver {
//自定义区域解析方式 @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) {
//获取页面手动切换传递的语言参数lang String lang=httpServletRequest.getParameter("lang");
//获取请求头自动传递的语言参数Accept-Language String header=httpServletRequest.getHeader("Accept-language"); Locale locale=null;
//如果手动切换参数不为空,就根据手动参数进行语言切换,否则默认根据请求头信息切换 if (!StringUtils.isEmpty(lang)){ String[] split=lang.split("_"); locale=new Locale(split[0],split[1]); }else{
//Accept-Language:en-US,en;q=0.9 或 zh-CN;q=0.8,zh;q=0.7 String[] splits=header.split(","); String[] split=splits[0].split("-"); locale=new Locale(split[0],split[1]); } return locale; } @Override public void setLocale(HttpServletRequest httpServletRequest, @Nullable HttpServletResponse httpServletResponse,@Nullable Locale locale) { } //将自定义的MyLocalResovel类重新注册为一个类型LocaleResolver的Bean组件
@Bean public LocaleResolver localeResolver(){ return new MYLocalResovel(); } }
3、编写LoginController.java ,类注解写@Controller
@Controller public class LoginController {
//获取并封装当前年份跳转到登录页login.html @GetMapping("/login") public String toLongPage(Model model) { model.addAttribute("currentYear", Calendar.getInstance().get(Calendar.YEAR)); return "login"; } }
4、国际化属性文件
login_en_US.properties
login.tip= Please sign in
login.username=Username
login.password= Password
login.rememberme=Remember me
login.button=Login
login_zh_CN.properties
login.tip=\u8BF7\u767B\u5F55
login.username=\u7528\u6237\u540D
login.password=\u5BC6\u7801
login.rememberme=\u8BB0\u4F4F\u6211
login.button=\u767B\u5F55
5、login.html文件代码
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1,shrink-to-fit=no"> <title>用户登录界面</title> <link th:href="@{/login/css/bootstrap.min.css}" rel="stylesheet"> <link th:href="@{/login/css/signin.css}" rel="stylesheet"> </head> <body class="text-center"> <!-- 用户登录form表单 --> <form class="form-signin"> <img class="mb-4" th:src="@{/login/img/login.jpg}" width="72" height="72"> <h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}" >请登录</h1> <input type="text" class="form-control" th:placeholder="#{login.username}" required="" autofocus=""> <input type="password" class="form-control" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me">[[#{login.rememberme}]] </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.button}" >登录 </button> <p class="mt-5 mb-3 text-muted">© <span th:text="${currentYear}" >2018</span>-<span th:text="${currentYear}+1">2019</span></p> <a class="btn btn-sm" th:href="@{/login(l='zh_CN')}" >中文</a> <a class="btn btn-sm" th:href="@{/login(l='en_US')}">English</a> </form> </body> </html>
6、效果图


参考文档9:
源码:
链接:https://pan.baidu.com/s/16mOedmX0AYruHPJXbxB7gA
提取码:x0iy

浙公网安备 33010602011771号