1. 程式人生 > 實用技巧 >多語言解決方案

多語言解決方案

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

設計及實現:

主體分為3個方面,一是對多語言內容的處理,整理出哪些業務內容是需要進行國際化處理的,統一放在多語言檔案當中。二是如何進行儲存,通過簡單快捷,低耦合的方式進行日誌的儲存。三是如何進行翻譯,即通過何種方式將於語言不相關的key找到對應的翻譯內容。

多語言檔案處理:

該專案是基於spring-boot實現的微服務架構方式,根據不同職責分為運營分析模組,系統管理模組和資料接入模組,系統日誌的處理專門由服務管理模組負責,因此多語言檔案也儲存在服務管理模組內部。因為系統日誌所要展現的內容有區分不同欄位,如下圖所示:

100013_sBGK_913484.png

所以需要對不同的欄位進行區分,這裡採用key的分段命名法來實現方便管理,如下圖所示:

100030_y1ZY_913484.png

由於是基於Spring框架,其本身就對多語言有支援,只需按照結構及命名要求將該多語言檔案存放至resource目錄下即可:

100034_IWR9_913484.png

多語言key值儲存:

由於多語言的內容是變化的,資料庫儲存的是不變的key值,通過key值找到對應語言檔案內的翻譯,各個業務只需要在插入時明確key值即可。而為了降低日誌插入功能與各個業務本身功能的耦合性,這裡採用的註解的方式來實現,即在業務方法上編寫日誌註解,同時指定好各個欄位所需要的key值,再通過切面的方式統一進行資料庫的插入。

首先新建註解類,將各個欄位的屬性列出:

100043_EFxi_913484.png

然後,在各個業務的呼叫方法上指定該註解及內部的屬性值:

100103_znJz_913484.png

最後編寫切面類,對有該註解的方法進行增強編寫,內容就是獲取到註解中的日誌資訊,然後將其儲存資料庫中。

多語言翻譯:

當用戶請求日誌頁面時,需要從資料庫中讀取日誌資訊並將其翻譯成需要的語言內容展示給前端頁面顯示,這裡分為兩步,一是獲取到使用者所需要的語言是什麼,在使用者登入時系統會儲存使用者的相關資訊到session裡,其中就有使用者的語言資訊,因此可以從這裡獲取到Locale資訊,二是如何翻譯,因為翻譯檔案命名是遵從Spring多語言格式的,因此這裡也可以通過呼叫Spring所提供的方法來方便快捷的得到翻譯內容:

100108_Tl1r_913484.png

這裡說明一下,有些日誌內容是不變化的,整個都是固定文字,而有些日誌內容卻需要加入一些變數來表示當時日誌的一些具體內容,這時就需要在翻譯檔案中寫格式化的內容,如下:

通過佔位符的方式,將變數預留好,同時資料庫中儲存著這些變數值,最終是以params引數的形式來傳入,Spring本身就已支援這種方式。

總結

多語言的處理在很多方面其實是大同小異的,比如說通過儲存key的方式來記錄,本文主要是結合Spring框架所提供的功能更方便的實現,以及對key的規劃管理上的一些實踐以提高可讀性

轉載於:https://my.oschina.net/ffse54s/blog/1623988