需要的类和配置:(框住的都是需要的, 没有框住的是我自己检测用的)
第一: 添加依赖
如果需要一个网页展示的话就需要用到 thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.7.4</version>
</dependency>
<!-- 引入thymeleaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.7.4</version>
</dependency>
第二: 添加页面html文件
注意: 这里的html 文件是需要放在resource文件下的templates(默认的)文件下的
- templates:用来存放模板引擎Thymeleaf(本质依然是.html文件)
- 如果需要直接放在resource文件或者其他路径下就需要自己配置(见下面properties配置)
- 由于我的controller中写的是index3的跳转, 所以建议这里直接命名为: index3.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<!-- <meta charset="GBK">-->
<title>Title</title>
</head>
<body>
<form>
<h3 th:text="#{login.tip}" >Please Sign in</h3>
<input type="text" th:placeholder="#{login.username}" > <br>
<input type="password" th:placeholder="#{login.password}"> <br>
<input type="checkbox" value="remember-me">[[#{login.remember}]] <br>
<button type="submit" th:text="#{login.btn}" > Sign in</button> <br>
<a th:href="@{/index3.html(lang='zh_CN')}" >中文</a>
<a th:href="@{/index3.html(lang='en_US')}">English</a>
</form>
</body>
</html>
第三: 创建一个类
1. SpringBoot为我们自动配置了LocaleResolver
组件,实现国际化我们需要自定义LocaleResolver
才能起作用,代码如下:
package com.yong.world;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
/**
* @author yong
* @date 2022-10-26 12:07
*/
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest request) {
//获取请求中的语言参数
String language = request.getParameter("lang"); // 比如: language = zh_CN
//默认的;如果没有就使用默认的
Locale locale = Locale.getDefault();
//如果请求的了携带了国际化的参数
if (!StringUtils.isEmpty(language)) {
String[] split = language.split("_"); // split = zhCN
locale = new Locale(split[0], split[1]);
// 国家zh // 语言CN
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
2. 再将自定义LocaleResolver注入到spring容器中:
package com.yong.world.config;
import com.yong.world.MyLocaleResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author yong
* @date 2022-10-26 12:19
*/
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// registry.addViewController("/").setViewName("index");
// registry.addViewController("/index.html").setViewName("index");
/* "/": 是用来接收<a th:href="@{/(lang='en_US')}">English</a>*/
// registry.addViewController("/").setViewName("index3");
/* "/index3.html": 是用来接收<a th:href="@{/index3.html(lang='en_US')}">English</a>*/
registry.addViewController("/index3.html").setViewName("index3");
}
/**
* 国际化配置
*/
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}
3. Controller:
package com.yong.world.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
/**
* @author yong
* @date 2022-10-24 16:22
*/
@Controller
public class LoginController {
@GetMapping("index3")
public String login() {
return "index3";
}
}
第四: application配置
文本外部化是从模板文件中提取模板代码的片段,以便可以将它们保存在单独的文件(通常是.properties文件)中,文本的外部化片段通常称为“消息(message)”。
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=utf-8
# 这个可以直接写在resource 文件下面就可以运行html
#spring.thymeleaf.prefix=classpath:/
# 这个是需要写在templates 下面才可以运行界面html (默认是写在templates 下面)
spring.thymeleaf.prefix=classpath:/templates/
#spring.messages.basename=home
spring.messages.basename=info # info: (自定义的名字)用来放置你的 message
第五: message 例子
英文:login.tip=Please Sign in login.username=username login.password=password login.remember=remember login.btn=Sign in中文:login.tip=\u8BF7\u767B\u5F55 login.username=\u7528\u6237\u540D login.password=\u5BC6\u7801 login.remember=\u8BB0\u4F4F login.btn=\u767B\u5F55
将这里的编码转换成 汉字形式显示:
第六: 结果展示
springboot 国际化