PS: 21 號,中行原油寶碰到了歷史上最低結算價,按照 - 37.63 美元 / 桶結算,要投資者按照 - 266.12 元 / 桶結算價平倉,事後發短信要求投資者即刻補足交割款,這意味著投資者,不但除了虧光保證金,剩下的要按 - 266 塊 / 桶倒貼,這裡面有一個投資常識,不懂的一定不投,不要盲目去抄底。
前面幾篇文章嘗試了接口開發、Thymeleaf 模板、常用語法及模板佈局,閱讀本文之前可以閱讀前面幾篇:
- Spring Boot 系列之開發一個接口
- Spring Boot 系列之 Thymeleaf 模板入門
- Spring Boot 系列之 Thymeleaf 常用語法
- Spring Boot 系列之 Thymeleaf 模板佈局
Spring Boot 項目的國際化實現起來非常簡單,為了保證 Spring Boot 系列的連續性,其項目的國際化也單獨為一篇文章,主要內容如下:
- 區域解析器
- 創建國際化配置文件
- 創建配置類
- 測試效果
區域解析器#
Spring 中提供區域解析器來識別用戶區域,依次來實現 Web 應用程序的國際化,區域解析器必須實現 LocalResolver
接口,也可以實現該接口創建自己的區域解析器
AcceptHeaderLocaleResolver
:默認區域解析器,通過 HTTP 請求的 accept-language 參數來解析區域;SessionLocaleResolver
:在當前會話有效,否則還原為默認狀態;CookieLocaleResolver
:在當前 Cookie 有效期內有效,否則還原為默認狀態;FixedLocaleResolver
:設置固定的Local
,不便於動態改變Local
;- 使用
LocaleChangeInterceptor
攔截器解析用戶區域。
下面將以 LocaleChangeInterceptor
攔截器和 SessionLocaleResolver
為例實現 Spring Boot 項目的國際化。
創建國際化配置文件#
Spring Boot 是支持國際化的,使用起來也比較方便,創建 Spring Boot 項目,在 resources 下創建一個名稱為 i18n 的文件夾,然後右擊依次選擇 New->Resourc Bundle 創建與個語言對應的配置文件 home.properties 文件,如下:
然後在配置文件 application.properties 文件中配置 Message
路徑,如下:
# Message路徑
spring.messages.basename=i18n.home
home.properties 屬性文件中的值如何獲取呢,如下:
mMessageSource.getMessage("home.title", null, LocaleContextHolder.getLocale());
創建配置類#
使用 LocaleChangeInterceptor
攔截器和 SessionLocaleResolver
,其設置的參數就是對應的 Local
,如下:
/**
* I18nConfig
*/
@Configuration
public class I18nConfig {
@Bean
public LocaleResolver localeResolver (){
return new SessionLocaleResolver();
}
@Bean
public WebMvcConfigurer webMvcConfigurer(){
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
LocaleChangeInterceptor changeInterceptor = new LocaleChangeInterceptor();
changeInterceptor.setParamName("lang");
registry.addInterceptor(changeInterceptor);
}
};
}
}
案例代碼#
I18nController
如下:
@Controller
public class I18nController {
@GetMapping(value = "/i18n")
public String il8n() {
return "i18n";
}
}
模板文件如下:
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Spring Boot I18n Sample.</title>
<script>
/**
* 頁面加載完成後調用
*/
onload = function() {
let href = window.location.toString();
let suffix = href.substring(href.length - 2, href.length);
let lang = document.getElementsByClassName("lang");
console.log("--suffix--" + suffix);
switch (suffix) {
case "CN":
setStatus(lang[0], lang[1], lang[2]);
break;
case "TW":
setStatus(lang[1], lang[0], lang[2]);
break;
case "US":
setStatus(lang[2], lang[1], lang[0]);
break;
default:
setStatus(lang[0], lang[1], lang[2]);
}
};
/**
* 設置語言標籤狀態
* @param show 已選擇的語言標籤
* @param def1 未選擇的語言標籤
* @param def2 未選擇的語言標籤
*/
function setStatus(show, def1, def2) {
show.style.color = "rgb(0,0,255)";
def1.style.color = "rgb(0,0,0)";
def2.style.color = "rgb(0,0,0)";
}
</script>
</head>
<body>
<h3 th:text="#{home.title}">default</h3>
<p style="font-size: 12px">
<a class="lang" href="i18n?lang=zh_CN"> 簡體中文 </a>|
<a class="lang" href="i18n?lang=zh_TW"> 繁體中文 </a>|
<a class="lang" href="i18n?lang=en_US"> English</a>
</p>
</body>
</html>
測試效果#
運行效果如下:
可以添加在公眾號回復關鍵字【加群】邀你進微信交流群,回復關鍵字【Spring Boot】獲取對應案例源碼鏈接。