☘gMIS吉密斯i18n國際化多語言更新

gMIS吉密斯部署和使用範圍日益擴大,跨國多語言版本成爲迫切須要的功能,早在2018年年中就考慮要增長這一功能——在gMIS吉密斯中實現多語言版本的支持。以期實現gMIS吉密斯的跨行業、跨地區和國際化多語言的廣譜應用目標。php

通過一段時間的密集開發、測試,目前gMIS吉密斯i18n多語言國際化更新已經完成。其中過程比預料的長,修改完善難度比預想的大,涉及到的修改模塊也較多,茲記錄備忘於此。git

1. 基於GWA2的多國語言包設計github

gMIS的開發框架是 GWA2吉娃兔,GWA2自己有跨語言的版本實現,如GWA2 Java, GWA2PHP,GWA2Perl等編程語言版本。gMIS所依賴的GWA2的編程語言版本爲GWA2PHP,因此gMIS的多語言實現也是繼承和擴展了 GWA2PHP(吉娃兔的PHP版本)的多語言開發模式。編程

在GWA2PHP的多國語言版本多實現中,主要依靠以下設施。json

語言模塊對象:
mod/language.class.php
其主要方法是實例化 Language.class 並加載語言包文件;同時提供按 lang_key 進行相應翻譯的操做方法;安全

語言包文件:
lang/language.pkg.zh_CN.json,
lang/language.pkg.en_US.json,
lang/language.pkg.ja_JP.json,
app

全局變量:
全局實例化 $lang 語言包對象,並在全局範圍內能夠訪問。
同時對當前語言環境進行探測,對語言版本環境對探測又進一步地區分爲有顯式的語言版本參數如 「&lang=zh」 等,或者使用隱式的語言環境參數來判斷當前應該加載哪一種語言包。框架

輸出 $lang 到模板引擎:
$data[‘$lang’][‘lang_key’] = $lang->get(‘lang_key’);
如此以來,即可在 模版文件中以 {$lang[‘lang_key’]} 多方式進行訪問。
後面會進一步地詳細描述。編程語言

2. Module類或Controler類PHP程序中調用語言包對象測試

在gMIS中,普通PHP文件中對多語言對象多訪問形式以下:

print $lang->get(‘lang_key’);

該語句將輸出按當前語言配置所加載語言包對應多 lang_key 所指向的語言版本相應的內容,其中語言對象 $lang 是全局變量,能夠在任意 controller文件中進行調用。相似地,在Module模塊類中,須要更多的修改,在Module模塊類的聲明建立和實例化時,引入全局變量語言包對象。

如在 mod/abc.class.php 的文件中,傳遞 $lang 對象:

public function __construct($args, $lang=null);

爲後向兼容,也能夠不安全或不推薦地直接使用全局變量 $ lang :

public function _myFunc(){
return if($lang){ $lang->get(‘lang_key’); }
}

3. HTML模板文件中調用

gMIS 在設計和實現 GWA2 PHP 時,完整地繼承了 GWA2 的 MVC,所以,做爲兼容和後續擴展,gMIS的大部分視圖文件,都以模版文件都方式呈現。

在國際化多語言的擴展中,咱們須要在模版引擎中增長對語言對象的輸出,形如:
$data[‘lang’][‘lang_key’] = ‘lang_value’;

而後在模版文件中使用以下方式增長對 lang_key 的調用:
{$lang[‘lang_key’]}

4. JavaScript腳本中調用

因爲 gMIS 在設計上採用了高效的 Ajax 技術,頁面進行了局部或部分的更新。這在多語言環境中,可能涉及到須要將相應的標籤字符進行多語言翻譯。
基於這種考慮,咱們在 ido.php 進行加載時,輸出 userinfo.$lang 全局變量,在其中以 JSON 方式將待翻譯的語言標籤輸出到 JavaScript中,從而使得當咱們須要在 JavaScript 調用相應的語言標籤時,可以進行順利的調用,進而顯示合適的語言版本給終端用戶。

userinfo.$lang = {「lang_key」:」lang_value」, 「」:」」};

在 JavaScript 實際調用中:

let buttonValue = userinfo.$lang[‘lang_key’];

5. XML/JSON數據表配置文件中調用

gMIS強大對可擴展性和伸縮性依賴於咱們所涉及對元數據與用戶數據對隔離,而實現元數據與用戶數據對融合操做對就是咱們對gMIS表數據處理引擎。

在gMIS,咱們針對每一張被管理的數據表建立了一個表格屬性描述文件,該屬性描述文件以配置文件xml格式存儲在 xml子目錄下。當目標數據表被加載時,數據處理引擎將讀取配置文件,以屬性描述文件定義的各類格式將用戶數據呈現出來。

在這一過程當中,顯然,若是咱們在屬性描述文件中有關於國際化多語言的內容標籤,就須要一併也要建立對應的語言版本的屬性描述文件。基於這些考慮,咱們將xml文件的國際化多語言修改形以下:

xml/abctbl.xml –> xml/abctbl.en_US.xml
xml/abctbl.xml –> xml/abctbl.zh_CN.xml
xml/abctbl.xml –> xml/abctbl.ja_JP.xml
….

默認狀況下,若是某個數據表efgtbl沒有 xml/efgtbl.xml 屬性描述文件,則使用系統默認的形式將用戶數據顯示出來;也是默認的,若是某個數據表 efgtbl 的某個國際化語言版本 xml/efgtbl.zh_CN.xml 沒有被建立出來,系統依然魯棒地使用默認配置將用戶數據用默認語言版本呈現出來。

6. lang_key /value 的設計與規劃

gMIS 國際化多語言的語言包文件的設計採用通用數據交換文件格式 JSON。在多語言標籤設計時,將標籤按以下分類進行設置:每一個標籤鍵名稱如下劃線分割的多段英文字符隔空。每段表示不一樣的層級。
樣例以下:
navi_xxxx,
func_xxxx,
form_xxxx,
user_xxxx,
func_importxlsx,
func_importxlsx_hint,
navi_help_company,
navi_help_company_faq,
….

7. 國際化多語言使用者/開發者社區

gMIS吉密斯源碼早幾年前已開源在 -github 上,然而因爲沒有進行國際化多語言操做,開發和使用僅限於中文環境,隨着此次國際化多語言的完善,gMIS的開發將迎來更多非中文開發者和使用者。

這將爲gMIS吉密斯的發展壯大注入更增強大而持續的動力,爲gMIS吉密斯由管理後臺進化爲管控操做系統作進一步地準備。

對非中文母語的開發者而言,源代碼中沒有了寫死的常量「中文」字符, 修改代碼再也不有障礙;gMIS吉密斯的代碼將獲得全球範圍內的開發者的審閱、修訂和完善。

對於非中文母語的使用者而言,能夠經過在首頁的使用語言切換功能,快速切換爲本身熟悉的語言界面. 從而爲gMIS帶來全世界的用戶。使用範圍將進一步地擴大到全球範圍。

從而實現了gMIS的跨行業、跨地區和跨語言的全新時代。


2019-11-04,山東威海國際機場。


 

gMIS吉密斯

-gMIS (general Management Information System,吉密斯) 是一種基於 -GWA2 (General Web Application Architecture,吉娃兔) 的通用管理信息系統應用軟件,具備可配置的輸入和輸出接口、開箱即用等特徵。
能夠在其上構建各類信息管理應用軟件系統,例如:
內容管理系統(CMS), 客戶資源管理(CRM), 企業資源計劃管理(ERP),
辦公自動化系統(OA)等, 以及各類行業應用管理系統軟件,例如:
人力資源管理系統(HR),學生管理,檔案管理,旅遊管理,圖書管理,
商品管理及業務運營支撐系統(BOSS)等等。
實現零代碼開發、快速搭建各類管理信息系統(MIS, Management Information System).

-gMIS is a -GWA2 based Management Information System (MIS) software with characteristics like configurable input and output interfaces, open-box-to-use.
Various management application software systems can be built on it, such as
Content Management System (CMS), Customer Resource Management (CRM), Enterprise Resource Planning Management (ERP),
Office automation systems (OA), as well as different industry application management system softwares, such as
Human Resource Management System (HR), Student Management, Archive Management, Tourism Management, Book Management,
Commodity management and business operations support systems (BOSS), etc.
With zero code development, -gMIS can build a set of management information systems (MIS) software in a few minutes.

Lower Costs,
Better Productivity. 下降成本, 提升效率.

相關文章
相關標籤/搜索