從零搭建後端框架 老闆要的國際化so easy

2021-10-09 07:53:20 字數 3368 閱讀 5180

不知道大家有沒有發現,最近幾年,但凡是老闆看重的產品或者系統,國際化成為了一種標配。最氣人的時候,專案剛開始做的時候,大家都沒說,臨了給老闆演示的時候或者突如其來,老闆說「咱們公司的目標是走向全世界,以後我們的所有系統都要支援雙語言或者三語言等」,然後程式設計師又開啟了內心mmb的加班模式。但是國際化其實也就聽起來高大上,並沒有大家想的那麼複雜,接下來我們看一種基於properties配置檔案又不需要改動太多原先**的方式,來實現老闆的國際化dream:

01何為國際化

頁面上的內容和提示資訊可以手動或者自動根據語言環境的變化而變化,現在市面上比較多的就是在頁面上有個語言切換的圖示(不是google瀏覽器的翻譯功能)。另外大部分的系統主要就實現了頁面上靜態資料的國際化(例如選單、提示、標籤等),動態資料或者業務資料就沒有做了,因為很多業務系統是私有化部署,通過資料隔離能夠避免中英文混亂

02國際化三部曲

①語言的儲存和切換

②獲取國際化資料

③統一處理返回結果

03具體實現

①語言的儲存和切換

先實現localeresolver和localechangeinterceptor

@slf4j

@configuration

public class i18nconfig implements webmvcconfigurer

@bean

public localechangeinterceptor localechangeinterceptor()

@override

public void addinterceptors(interceptorregistry registry) }

➯localeresolver用於儲存語言,這裡將語言的資訊儲存在cookie中,所以使用現成的實現cookielocaleresolver,如果需要將語言儲存在session中,可以使用sessionlocaleresolver

➯localechangeinterceptor是***,用於切換語言。若請求中有lang引數,就會根據該值切換語言。 通過實現webmvcconfigurer的addinterceptors方法,將該***放入***鏈中

@apioperation("切換語言")

public apiresultchangelanguage(@requestparam(name = "lang") @apiparam(name = "lang", value = "語言", required = true) string lang)

@apioperation("獲得當前語言")

public apiresultgetlanguage()

}

呼叫切換語言的介面:curl -x post 「http://localhost:8080/language/change?lang=en_us」

可以在cookie中看到語言資訊:

呼叫獲得當前語言介面:curl -x get 「http://localhost:8080/language」 -h 「accept: /」

可以獲取返回結果:

②獲取國際化資料

要想獲取國際化資料,首先需要新增國際化檔案。預設的檔名為messages*.properties,也可以通過配置spring.messages.basename=messages修改檔名,存放的檔案路徑為:/resources/i18n/,如下:

在檔案中以鍵值對的形式儲存資料

✬預設資料:messages.properties

success=api呼叫成功

fail=api呼叫失敗

✬英文資料:messages_en_us.properties

success=success

fail=fail

✬中文資料:messages_en_us.properties

success=api呼叫成功

fail=api呼叫失敗

國際化資料有了,語言有了,那如何獲取到當前語言的資料?這裡使用resourcebundlemessagesource來解析國際化檔案,如下:

@slf4j

@configuration

public class i18nconfig

@autowired

private messagesource messagesource;

@apioperation("成功")

public apiresultsuccess()

@apioperation("失敗")

public apiresultfailure()

➯localecontextholder.getlocale(); 獲取當前語言

➯messagesource.getmessage(); 獲取國際化資料

這裡用到resultcode:

在這裡統一處理之後,就不需要在controller進行處理

呼叫切換語言的介面:curl -x post 「http://localhost:8080/language/change?lang=en_us」

返回結果如下:

以上我們就實現了國際化,並且不需要對以前的**進行多大的改動,只需要將原來的提示資訊等資料換成code值,然後將code值在國際化檔案裡配置即可,是不是炒雞easy

花有重開日,人無再少年 → 我是花少#更新不斷,下期繼續#走過路過記得留下關注和點讚!!!

從零搭建 Spring Boot 後端專案(一)

簡介 這一小節主要是初始化專案,以及建立好相應的目錄結構步驟 接下來新建如下的 目錄,和相關的配置檔案,目的在於規範我們的專案結構,之後的操作都將依賴此結構 層結構 資源目錄結構 靜態資源目錄 resources static 檢視模板目錄 resources templates mybatis配置...

從零搭建 Spring Boot 後端專案(六)

簡介 這一小節主要是為了,統一請求結果格式步驟 注 這裡統一的返回結果,只能保證我們沒有丟擲異常的情況,統一返回結果,但是程式丟擲異常後,返回結果將不再統一,此時我們需要全域性異常處理,再統一返回資料,下面會寫到 測試這裡可以把controller返回的資料放到resultdata類的data下返回...

從零搭建WebApi介面開發框架 介面規範

因為是介面框架,首先要做的就是制定介面規範,好的介面規範能約束開發人員,能降低前後端人員之間的溝通協調,能避免後期聯調帶來的一系列問題。1.介面規範 介面規範包含以下內容 1 請求型別及引數 2 返回值及返回碼 3 許可權及版本控制 4 介面示例 2.介面請求說明 api使用restful風格,介面...