1、创建SpringBoot Maven项目
本文只需引入依赖包Spring Web和Thymeleaf
2、配置application.properties
#编码(默认UTF-8) 热部署 html标准(默认5)
spring.thymeleaf.cache=false
#Thymeleaf消息实现国际化多语言 绑定i18n文件夹下的message文件
spring.messages.basename=i18n.message
3、创建i18n文件夹以及三种语言配置文件properties
i18n文件夹名称可自定义,修改步骤2的绑定路径即可
message_zh_CN.properties 中文
home.tv = 索尼挂壁26寸电视 中文
message_en.properties 英文
home.tv = sony 26inch tv english
message.properties 没有匹配的区域时使用默认语言
home.tv=索尼挂壁26寸电视 默认
Thymeleaf的消息表达式#{home.tv}会按一定规则去寻找匹配的语言配置文件properties(已经绑定message文件)
(原理上是通过java.util.Locale查询客户端的区域设置locale)
先找国家(CN、US),再找语言(zh,en),都找不到就用默认语言
html中插入如下内容即可替换detail:
<!-- 消息表达式例子-->
<p th:text="#{home.tv}">detail</p>
因为application.properties文件已经绑定了i18n.message文件,所以会Thymeleaf会自动搜索到message_xx_xx.properties里的home.tv文本。
4、如何节省时间同时修改多个语言配置文件properties
使用resource bundle资源文件编辑器
IDEA自带有resource bundle,本文使用eclipse,需要下载resource bundle插件(需访问国外网址)
Help——》eclipse marketplace——》搜resource bundle,下载即可
安装完后,右键任意一个语言配置文件properties,open with选资源文件编辑器即可。
5、(扩展)自定义HTML链接控件切换语言
先弄个Controller类来响应网址,TestControoler.java:
package com.zzz.test02_sb_thymeleaf.controller;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestControoler {
@RequestMapping("/test01")
public String test01(Model model,HttpServletRequest request) {
//添加数据
//方法一
//model.addAttribute("name", "小明");
//方法二
request.setAttribute("name", "小强");
//返回指定模板视图
return "/test01.html";
}
}
再创建个网页test01.html:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 取值例子:读取model域值,填充文本 -->
<p th:text="${name}"></p>
<!-- 消息表达式例子:国际化多语言的使用 -->
<p th:text="#{home.tv}">detail</p>
<!-- 自定义区域语言 -->
<!-- 请求网址,提交参数 http://localhost:8080/test01?l=zh_CN -->
<a th:href="@{~/test01(l='zh_CN')}">中文</a>
<a th:href="@{~/test01(l='en_US')}">English</a>
</body>
</html>
为了实现自定义区域语言,根据“l”参数值调整locale,创建两个config类:
MyLocaleResolver.java用来接收“l”参数值并调整locale
package com.zzz.test02_sb_thymeleaf.config;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
//自定义区域解析器
public class MyLocaleResolver implements LocaleResolver{
//区域解析器,传参时指定语言,不传参时自动分配消息表达式
@Override
public Locale resolveLocale(HttpServletRequest request) {
//取得浏览器请求中URL参数的语言
String l = request.getParameter("l");
//取得浏览器Response Headers中的语言,无参时使用
Locale locale = Locale.getDefault();
if (!StringUtils.isEmpty(l)) {
String[] split = l.split("_");
locale = new Locale(split[0], split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest arg0, HttpServletResponse arg1, Locale arg2) {
// TODO Auto-generated method stub
}
}
要使MyLocaleResolver工作,还要注入到Spring容器中,创建MyConfig.java:
package com.zzz.test02_sb_thymeleaf.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
//Spring配置文件,自动注入Spring容器中
@Configuration
public class MyConfig {
//把MyLocaleResolver自动注入Spring容器中
@Bean
public LocaleResolver localeResolver() {
return new MyLocaleResolver();
}
}
项目目录结构如下:
最终测试效果:
切换英文成功。
6、小结
学会了web maven环境下使用Thymeleaf消息表达式,以及如何自定义改变区域语言(在url请求后面加“l”参数值)。