jeecg 國際化處理
概述
國際化的需求是為了適應不同的語言環境,能夠提供不同的語言文字,以便更好地服務使用不同語言文字的人群。我們在開發過程中,一般為了快速實現需求,比較容易忽視國際化的需求,直接在程式碼裡 hardcode 了中文方案。在真正有客戶反映要切換不同語言時,才將原來 hardcode 的程式碼轉換為字元碼,根據 locale 環境做轉換。
jeecg 的國際化方案
在 jeecg 的管理後臺介面,我們可以看到有一個“國際化語言”的模組,用來管理需要國際化資源。
從功能介面上展示的欄位,我們可以猜測出,jeecg 的實現方案是,定義一個 key ,然後為這個 key 提供不同語言對應的內容,然後在客戶端請求資料時,根據請求傳入的引數來決定選用哪種語言的內容。在錄入或編輯的彈出窗,“語言”欄位的選項只有“中文”和“English”兩種,說明目前系統只支援這兩種語言。從介面上無法看出的邏輯是,系統是怎麼從請求來判定該用什麼語言的?下面我們通過檢視程式碼來查詢答案。
國際化語言的服務實現類 MutiLangServiceImpl 提供了 getLang(String langKey) 方法來獲得對應的語言內容:
/**取 o_muti_lang.lang_key 的值返回當前語言的值**/
public String getLang(String langKey)
{
//從請求頭Accept-Language獲得客戶端接受的語言
String language = BrowserUtils.getBrowserLanguage(request);
if(request.getSession().getAttribute("lang") != null)
{
//從session屬性取得繫結的語言
language = (String)request.getSession().getAttribute("lang");
}
//從快取集合裡得到key對應的語言內容
String langContext = ResourceUtil.mutiLangMap.get(langKey + "_" + language);
if(StringUtil.isEmpty(langContext))
{
langContext = ResourceUtil.mutiLangMap.get("common.notfind.langkey" + "_" + request.getSession().getAttribute("lang"));
if("null".equals(langContext)||langContext==null ||langKey.startsWith("?")){
langContext = "";
}
langContext = langContext + langKey;
}
return langContext;
}
以上便是 jeecg 實現國際化的主要流程,比較簡單。如果要擴充套件到更多語言,則需要增加可配置選項,這時會發現 jeecg 程式碼裡是用列舉類固定了可選的語言,因此要擴充套件還需要增加列舉項,以及修改相應的程式碼,這點就不太靈活了。如果要國際化的key都是比較固定的,一般會通過屬性檔案來配置,檔名的字首一樣,字尾為語言的 locale 字元,這種能用的處理方法也適用於客戶端處理國際化。而 jeecg 通過資料庫來管理國際化,也適合一些需要線上修改語言內容,動態管理的場景。所以,最終選擇什麼樣的方案,還是要根據業務場景來選擇。
相關文章
- Node.js處理國際化Node.js
- 【spring 國際化】springMVC、springboot國際化處理詳解SpringMVCSpring Boot
- 聊聊前端國際化文案該如何處理前端
- Asp.net Core MVC 程式的國際化處理ASP.NETMVC
- Angular primeNg i18n 國際化多語言處理Angular
- 使用Vue i18n對前端頁面進行國際化處理Vue前端
- 國際化思考
- ios國際化iOS
- 【總結】國際化數字格式處理解決神器
- Java 國際化(一)Java
- Android國際化Android
- Jsf國際化JS
- Vue國際化處理 vue-i18n 以及專案自動切換中英文Vue
- iOS 國際化 && 本地化iOS
- iOS國際化(本地化)iOS
- 網易AI Lab斬獲自然語言處理國際頂會冠軍AI自然語言處理
- Java中的國際化Java
- Spring Webflux國際化SpringWebUX
- Webnovel 國際化實踐Web
- Grails國際化例項AI
- QT6 國際化QT
- Struts框架的國際化框架
- Java國際化小小示例Java
- Yii2-國際化
- iOS語言國際化(本地化)iOS
- Django國際化與本地化指南Django
- Spring-boot國際化Springboot
- vux UI 專案國際化UXUI
- 5分鐘前端國際化前端
- Laravel 文件閱讀:國際化Laravel
- ?HeyUI完成國際化支援啦????UI
- Android實現國際化Android
- struts國際化程式嘗試
- JAVA的國際化機制Java
- 「Adobe國際認證」瞭解Adobe Photoshop,如何處理各種
- Java模組化的國際化實現- GunnarJava
- Flutter 國際化適配實戰Flutter
- 實用的 Flutter 國際化指南Flutter