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寸电视 默认

spring boot 多语言能不能不用properties_spring


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选资源文件编辑器即可。

spring boot 多语言能不能不用properties_java_02


spring boot 多语言能不能不用properties_html_03

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();
	}
}

项目目录结构如下:

spring boot 多语言能不能不用properties_java_04


最终测试效果:

spring boot 多语言能不能不用properties_spring_05


切换英文成功。

6、小结

学会了web maven环境下使用Thymeleaf消息表达式,以及如何自定义改变区域语言(在url请求后面加“l”参数值)。