Spring Boot國際化(i18n)
國際化(internationalization)是設計和製造容易適應不同區域要求的產品的一種方式。它要求從產品中抽離所有地域語言,國家/地區和文化相關的元素。換言之,應用程式的功能和程式碼設計考慮在不同地區執行的需要,其程式碼簡化了不同本地版本的生產。開發這樣的程式的過程,就稱為國際化。
那麼當我們使用Spring Boot如何進行國際化呢?那麼當你讀完這篇文章你會學到如下知識:
(1) spring boot 加入thymeleaf;
(2) 頁面元素國際化;
(3) spring boot預設國際化原理說明;
(4) firefox瀏覽器修改區域語言;
(5)chrome瀏覽器修改區域語言;
(6)修改預設messages配置字首;
(7) 程式碼中如何獲取國際化資訊;
(8) 優化程式碼獲取國際化資訊;
(9) 區域解析器之AcceptHeaderLocaleResolver;
(10) 會話區域解析器之SessionLocaleResolver;
(11) Cookie區域解析器之CookieLocaleResolver;
(12)固定的區域解析器之FixedLocaleResolver ;
(13)使用引數修改使用者的區域;
接下里我們看看這些具體應該怎麼操作。
(1) spring boot 加入thymeleaf;
這篇文章有介紹過,所以這裡就不過多進行介紹了。在這裡我們為之後的講解做點基本準備。
模板檔案resources/templates/hello.html :
1 2 3 4 5 6 7 8 9 10 11 12 |
<!DOCTYPE html>
< html >
< head >
< meta charset = "UTF-8" />
< title >hello spring boot</ title >
</ head >
< body >
< p >歡迎你登入到阿里巴巴網站</ p >
</ body >
</ html >
|
這裡沒有特殊的程式碼,訪問就是顯示一些文字,這裡還沒加入國際化的相關東西,之後新增。
編寫訪問地址:com.kfit.controller.HelloController:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package com.kfit.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController {
@RequestMapping ( "/hello" )
public String hello(){
return "/hello" ;
}
}
|
這裡就是訪問http://127.0.0.1:8080/hello就跳轉到hell.html進行訪問。
到這裡準備工作就好了。
(2) 頁面元素國際化;
我們觀察hello.html裡面的資訊直接就是中文顯示,所以我們現在的需求是當訪問語言是zh的時候顯示為中文,當語言為en的時候顯示為英文,那麼怎麼操作呢?
首先我們先定義國際化資原始檔,spring boot預設就支援國際化的,而且不需要你過多的做什麼配置,只需要在resources/下定義國際化配置檔案即可,注意名稱必須以messages開發。
我們定義如下幾個檔案:
messages.properties (預設,當找不到語言的配置的時候,使用該檔案進行展示)。
messages_zh_CN.properties(中文)
messages_en_US.properties(英文)
具體的程式碼如下:
messages.properties:
welcome = 歡迎你登入到 阿里巴巴 網站(default)
messages_zh_CN.properties:
1 |
welcome = \u6b22\u8fce\u4f60\u767b\u5f55\u5230 \u963f\u91cc\u5df4\u5df4 \u7f51\u7ad9\uff08\u4e2d\u6587\uff09
|
對應的資訊是:
welcome = 歡迎你登入到 阿里巴巴 網站(中文)
messages_en_US.properties:
1 |
welcome = welcome to login to alibaba website(English)
|
配置資訊就這麼簡單,那麼在前端展示怎麼修改呢,修改hello.html檔案,使用#{key}的方式進行使用messages中的欄位資訊:
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html>
< html >
< head >
< meta charset = "UTF-8" />
< title >hello spring boot</ title >
</ head >
< body >
< p >< label th:text = "#{welcome}" ></ label ></ p
|