陳 京,陳容紅,江志農
(1.北京化工大學 診斷與自愈工程研究中心,北京 100029;2.北京電子科技職業學院 自動化工程學院,北京 100176)
隨著時代進步、國際化接軌,軟件多語言版本的需求日益增強,設備故障監測診斷平臺也同樣如此[1]。同時由于嵌入式環境的特殊性,各方面資源都受到一定限制,因此它對多語言技術具有一定的特殊需求。基于Json的多語言實現技術相對于傳統方案在速度、空間利用方面有所提高,同時利于拓展與修改,能滿足嵌入式多語言的需求,同時通過開發資源管理工具對多語言資源進行管理,釋放了開發人員的精力,使其能更集中于核心業務之中。目前該技術已應用于大型故障監測診斷平臺與手持式巡檢儀中。
目前的程序多語言技術通過資源文件狀態大致可以分為以下3種:
1)資源內嵌式多語言技術;
2)資源文件二進制化;
3)資源文件文本化。
傳統的多語言程序多使用內嵌式多語言化技術。即將多種語言所需要使用的資源硬編碼到程序代碼中,程序啟動時通過某個參數來確定使用將哪一種資源展現給用戶。
內嵌式多語言技術具有資源加載速度快,占用資源較少的優點。但由于資源定義于程序當中,一旦資源發生變動,便需要重新編譯整個項目文件。這會大幅降低軟件開發進程,無法滿足當前日益增快的軟件迭代速度要求[2]。
基于這一點,較新的多語言實現技術將多語言資源從程序中提取出來,作為單獨的資源文件存在,即資源文件二進制化。這時的資源文件通常體現為Dll的形式。這種形式的資源文件同樣具有資源加載快、占用空間小的優點,同時由于資源文件與主程序相分離,資源方面的改動不會影響到主程序。但這種多語言化技術的資源仍存在資源變動難的問題,資源每次更新后仍需開發人員進行編譯發布,這種多語言實現技術通常是通過定義VC的純資源Dll并提供相應的管理接口來實現[3-4]。
目前最新的多語言技術則屬于資源文件文本化。即將資源文件完全與主程序剝離開來,以文本文件的形式存在,主程序通過中間的管理類來與資源文件進行交互,無法直接對資源文件進行讀取。這種方法相對于前兩種方法來說修改靈活,使用方便并且易于拓展和升級,但由于文本實現機制的不同,往往各種方式的性能、空間占用率等方面都存在很大差別。目前比較通用的是使用Xm l文件來對資源文件進行存儲。
Xm l(extensiblemarkup language)是一種用于標記電子文件使其具有結構性的標記語言,可以用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。
基于Xml的實現方案將字符串與對應的ID定義與Xml文件中,應用程序通過解析Xm l文件中的信息來獲取相應的字符串[5]。其大致思路與本文相同,但Xm l在效率上存在一定問題。Xml文件中存在很多用于解析的附加信息,而一般程序中的字符串量都很大。這些附加信息導致Xml資源文件變得臃腫,占用額外的空間并影響程序的解析速率。
Json(JavaScript Object Notation)是一種輕量級的數據交換格式。它基于JavaScript(Standard ECMA-262 3rd Edition-December 1999)的一個子集。 JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C,C++, C#,Java, JavaScript, Perl, Python 等)。 這些特 性 使Json成為理想的數據交換語言。易于人閱讀和編寫,同時也易于機器解析和生成。
Json中的對象通常可以分為兩種類型:鍵/值對與值的有序列表。鍵/值對在Json中的表達方式為:{“Key”:Value}。相對于更加直觀的表達式Key=Value,這種表達方式占有更多的空間,但當文件中存在很多鍵值對時,這種表達方式更易于理解,可讀性更強,而且相對與Xml來說,它可以用更小的空間來體現相當的含義[6]。
Json多語言技術是屬于資源文件文本化的一種多語言技術。因此程序與文本化資源之間需要一個接口來對資源進行讀取、切換語種等操作。這個接口需要將資源的變化與主程序隔離開來。使得修改資源文件時,主程序不會受到影響。同時,這個接口還需要具有良好的拓展性,便于添加新的語種文件。
基于此,可以采用將可用語種與相關資源路徑都定義于Json配置文件中,而將存取接口定義與資源管理Dll中的方案。資源管理Dll中所必須的接口有:獲取默認語種,設置默認語種,獲取多語言資源,設置多語言資源等。程序獲取多語言資源時,只需要與資源管理Dll交互,而不用關心當前的語種、資源文件的種類、路徑等信息。
而需要拓展時只需在配置文件中添加相關語種定義及對應資源即可。程序中與語言種類相關的資源通常有字符串、圖片、語音等,因此,配置文件一般內容如表1所示。
程序通過接口讀取配置文件中的默認語種種類,并尋找對應資源路徑,來初始化程序的界面顯示。同時程序獲取所有可用語種,并向用戶提供相應選項來達到實時切換語種的目的。

表1 配置字段Tab.1 Config fields
對于需要使用的資源,程序中定義的是資源的一個ID,程序通過這個ID與當前語種的資源路徑名來獲取對應的語種資源。相對與圖片、語音等資源,字符串的資源定義最為直接,他只需在Json文件中存儲與ID相對應的字符串資源,主程序就能通過解析Json文件得到所需的字符串。字符串資源文件所需字段如下:
1)字符串ID:與主程序中定義的字符串ID相對應。
2)字符串值:主程序所想要展現給用戶的最終字符串。不同語種統一ID對應的值表達的意義應相同。體現在Json文件中則是如下格式:

圖片資源與語音資源相對復雜,因為文本文件中無法直接存儲對應的語種資源。本文采取的解決方案時鍵值所對應的是資源所在的路徑。其資源定義字段為:
1)資源ID:和字符串類型一樣,與主程序中定義的ID保持一致。
2)資源路徑:主程序展現給用戶的最終圖片或語音文件的路徑。
體現在Json文件中,其格式如下:

盡管Json文件定義清晰,利于理解,但仍然不是很貼切自然語言的使用方式,這對資源的維護帶來了一定的困難。
專門制作一款用于維護資源庫的輔助工具,按照預先定義好的協議將資源信息寫入Json文件中。這樣可以便利的添加與刪除資源,使非開發人員也能熟練的對資源文件進行操作,減小開發量。
輔助工具可以使用與主程序相同的接口庫對資源文件進行存取,而不必進行特意的開發。在界面展示上,輔助工具可以借助已有的表格工具,將Json內容轉換為csv格式,通過Excel進行顯示,方便快捷。
由于資源文件內嵌式多語言技術與資源文件二進制化多語言技術均難以對需求的變更進行及時的響應,同時其拓展性也有很大的限制,本文未將其進行對比。本文進行對比的是同為資源文本化的Xml多語言化技術。
在一個程序中多語言資源最主要的部分就是字符串,因此本文主要針對字符串存取的3個方面對其進行的測試比較。
測試字符串均為 “TestString”,測試結果分別如表2、表3、表 4所示。

表2 字符串讀取速度Tab.2 Reading tim e

表3 字符串寫入速度Tab.3 W riting tim e

表4 資源文件占用空間大小Tab.4 File size
由測試結果可知,在存取速度上,Json多語言技術是Xml多語言技術的2.3倍左右,而Json文件的大小則為Xm l文件的1/2左右。Json多語言技術相對于Xm l技術來說具有很明顯的優勢,更符合嵌入式開發各種條件都受到限制的環境。
通過實現WinCE系統下的手持式巡檢系統的多語言化,證明了該方案的可行性。
實現效果圖如圖1、圖2所示。

圖1 中文主界面Fig.1 Chinese interface

圖2 英文主界面Fig.2 English interface
國家交流日益頻繁,多語言技術發展難以避免。本文針對嵌入式軟件平臺的特殊性提出的基于Json的多語言實現技術。經過與傳統方案的對比,具有切實的可行性與操作性。同時開發對資源文件進行維護的拓展工具的維護方法,可以減小開發人員任務量,使其能專注于核心業務,具有實用性。
[1]宋秋貴,岳峰,石正海,等.一種應用于Unicode設計多語言實時切換應用程序的解決方案 [J].電腦開發與應用,2006,19(3):53-55.
SONGQiu-gui,YUE Feng,SHIIZheng-hai,etal.Solution for designing multilanguage real-time switchover application program with unicode[J].Computer Development& Applications,2006,19(3):53-55.
[2]翼斌.Windows平臺下應用軟件多語言支持 [J].計算機工程,2004,30(1):163-164.
JIBin.Applicationmulti-lingual supporton windows platform[J].Computer Engineering,2004,30(1):163-164.
[3]唐勇,李秀龍,陳晶,等.多語言用戶界面的研究與實現[J].計算機應用研究,2002,4(1):112-113.
TANG Yong,LIXiu-long,CHEN Jing,et al.The study of the technology of multi-language user interface[J].Application Research of Computers,2002,4(1):112-113.
[4]蔣衍君.電力監控軟件多語言支持 [J].電力自動化設備,2008(3):91-95 JIANG Yan-jun.Multi-language support of power SCADA software[J].Electric Power Automation Equipment,2008(3):91-95.
[5]王鋒,魏曉麗,江開耀.基于XML的C#多語言界面實現[J].計算機工程與設計,2008,29(15):4073-4074.WANG Feng,WEIXiao-li,JIANG Kai-yao.Implemention of multi-language interface on C#based on XML[J].Computer Engineering and Design,2008,29(15):4073-4074.
[6]高靜,段會川.JSON的數據傳輸效率研究[J].計算機工程與設計,2011,23(7):2267-2270.
GAO Jing,DUAN Hui-chuan.Research on data transmission efficiency of JSON[J].Computer Engineering and Design,2011,23(7):2267-2270.