区域解析器的使用,中英文切换,thymeleaf实现国际化

效果图:中英文切换

定义两个相同的前台页面index1、index2,在其中一个页面点中文,那么另一个页面刷新一下也会显示中文,在当前页面点英文,另一个页面刷新一下也会同步成英文。

实现代码:

controller:

@Controller
@RequestMapping("/test")
public class TestInterceptorForwordCon {
    @Resource
    private UserService userService;
    @GetMapping("/test3")
    public String test3(Model model, HttpSession session, HttpServletRequest request){
        ManagerUser user1 = userService.selectUserById(1);
        model.addAttribute("user1",user1);
        return "jsps/index2";
    }
    @GetMapping("/test4")
    public String test4(Model model, HttpSession session, HttpServletRequest request){
        ManagerUser user1 = userService.selectUserById(4);
        model.addAttribute("user1",user1);
        return "jsps/index1";
    }
    @GetMapping("/test2")
    public String test2(String lang, HttpServletRequest request, HttpServletResponse response){
        //获取区域解析器
        LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
        //根据lang参数,设置区域解析器的语言
        if(lang.equals("zh")){
            localeResolver.setLocale(request,response, Locale.CHINA);
        }else if(lang.equals("en")){
            localeResolver.setLocale(request,response, Locale.US);
        }
        String referer = request.getHeader("referer");
        return "redirect:"+referer;
    }
}

application.yml:

#热部署
spring:
  devtools:
    restart:
      enabled: true
  #配置springMvc视图解析器
  mvc:
    view:
      prefix: /jsps/
      suffix: .jsp
#配置数据源
  datasource:
      url: jdbc:mysql://localhost:3306/witkey
      username: root
      password: root
      driver-class-name: com.mysql.jdbc.Driver
#thymeleaf缓存关闭,让它实时进行更新
  thymeleaf:
    cache: false
#国际化语言默认读取的配置文件路径,默认读取以messages开头的文件
  messages:
    basename: messag/messages
#mybatis相关配置
mybatis:
  mapper-locations: classpath:mapping/*.xml
  type-aliases-package: com.example.demo6.pojo
  configuration:
    map-underscore-to-camel-case: true

#jsp热部署
server:
  jsp-servlet:
    init-parameters:
      development: true
#打印mybatis的sql语句
logging:
  level:
    com.example.demo6.mapper: debug

index1.html、index2.html:

springboot项目里创建的html文件是html5文件,需要自己手动在<meta>标签上加上结束符/,变成<meta/>

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
</head>
<body>
<a th:href="@{/test/test2(lang=zh)}">中文</a>|<a th:href="@{/test/test2(lang=en)}">EngLish</a>
<hr/>
<div th:object="${user1}" style="border: 2px solid red;width: 500px;height: 300px;text-align: center;">
    <h3><span th:text="#{userName}"></span><span th:text="*{userName}"></span></h3>
    <h3><span th:text="*{id}"></span></h3>
    <h3><span th:text="#{phone}"></span><span th:text="*{phone}"></span></h3>
    <h3><span th:text="#{password}"></span><span th:text="*{password}"></span></h3>
    <h3><span th:text="*{dept}"></span></h3>
</div>
</body>
</html>

messages.properties文件里可以为空

messages_en_US.properties文件里内容如下:(我就随便定义了三个)

userName=mrsChen:
password=chen123:
phone=17667448304:

messages_zh_CN.properties文件里也一样,不过这后面的中文需要转换,Unicode中英文转换,网址:http://tool.chinaz.com/tools/unicode.aspx

userName=\u7528\u6237\u540d:
password=\u5bc6\u7801:
phone=\u7535\u8bdd:

例如:用户名的转换(符号也可以进行转换)

定义一个配置类MessagesConfiguration:这里面可以设置默认语言,如果用户在浏览器上对其他语言进行了选择,那么就会读取controller里面的设置,对默认语言进行覆盖;

package com.example.demo6.configuration;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

import java.util.Locale;
@SpringBootConfiguration
public class MessagesConfiguration {
    //区域解析器
    @Bean
    public LocaleResolver localeResolver(){
        SessionLocaleResolver slr = new SessionLocaleResolver();
        //设置默认语言
        slr.setDefaultLocale(Locale.US);
        return slr;
    }
}

这样,这个语言之间的转换就可以使用了,这里只讲解了中英文之间的转换,如果想转换成其他语言,方法也类似,over,over!

猜你喜欢

转载自blog.csdn.net/qq_43154385/article/details/85560540