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

posted @ 2020-09-07 22:41  codeing123  阅读(620)  评论(0)    收藏  举报