國際化:簡單來說,就是利用浏覽器語言,或者頁面中的中英文切換,将頁面的文字在其它語言和中文進行切換。
比如:

需求:我們想點選中文,就是中文,點選英文就是英文的。
Spring boot預設是按照浏覽器的語言來切換中英文的,那麼我們可以在resources中這樣寫:
- 建立一個“i18n”的包,我們用來存放國際化配置,然後在這個包下,我們再建立幾個properties的配置檔案,用來配置語言:
springboot + thymeleaf 國際化 如圖方式,我們建立3個檔案,分别是無語言配置時候生效的login.properties;中文生效的login_zh_CN.properties;英文生效的login_en_US.properties;
也就是以下劃線的組合:檔案名_區域_語言.properties;當我們這樣命名生成檔案後,IDEA也會幫我們識别這是個國際化配置包,自動轉換成上面的模式:
當然變成如上模式的時候,我們再需要添加配置檔案,直接在包右鍵new就可以了
springboot + thymeleaf 國際化 按照如圖的方法,點選加号,添加一個key,我們取名叫login.tip就是頁面中用到的提示的意思springboot + thymeleaf 國際化
接下來,按照我們頁面需要轉換的量,來做配置,如下圖(我把等下登入頁要用的都配置好了):
還沒完,不要急,看起來複雜,學會了就簡單了,後邊我們需要将頁面上引用這些值,來看。
記得在我們的application.properties中添加配置參數,讓我們的配置生效:
spring.messages.basename=i18n.login
基于之前的文章,我們了解到Thymeleaf中的文法中@和#的作用,看看如何使用,先直接上圖:
前邊表單裡我們将所有需要的參數用#{xx.yy}的形式,按照配置的國際化參數都設定好,為了使用模闆,我們需要用到th:text之類的參數來替換原來的參數。(注意看原來頁有同樣的text、placeholder等參數)
而為了使Thymeleaf模闆生效,别忘了在html的參數中加上這句xmlns:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
這樣,我們就可以在切換浏覽器語言的情況下,進行中英文切換了,設定方法以chrome舉例(需要英文就添加英文置頂):
自定義配置,使我們頁面中的中英文切換生效
有耐心的同學,我們來看一下正題,怎麼使自己的配置生效:
- 文章頂部的截圖,我們看到的中英文按鈕的HTML,我們來看,如何配置:
springboot + thymeleaf 國際化
注意,我這裡将通路的頁面其實是;localhost:8080/index.html?l=zh_CN,這也是我們點選中文按鈕以後生成的連結。在Thymeleaf的模闆文法中,參數是不用“?”的,而是使用小括号,然後參數按照key=value的形式設定,注意單引号;
- 為了讓自定義的配置生效,我們要做的就是覆寫或改變預設的配置,那麼我們建立一個檔案 MyLocaleResolver,用來實作 LocaleResolver 接口的作用;
springboot + thymeleaf 國際化
具體方法:(因為我們的區域是用下劃線“_”來配置的,是以這裡用分隔符來取得區域和語言,放到request中)
package com.iceodin.common.component;
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;
/**
* 在連結上攜帶區域資訊
*/
public class MyLocaleResolver implements LocaleResolver {
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String l = httpServletRequest.getParameter("l");
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 httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
- 讓我們的配置生效,當然就要把配置加入到SpringBoot的容器中,是以,在之前的配置檔案中,加入Bean:
springboot + thymeleaf 國際化 -
最好我們來看成果喽:
預設的語言展示,由于浏覽器預設中文,是以:
然後點選下方English,看url和頁面的變化:
我們再點選中文: