• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于XML的軟件動態(tài)多語言設計

      2014-04-29 00:00:00張先韜黃麟森
      計算機光盤軟件與應用 2014年13期

      摘 要:以中文語言開發(fā)成型的一款行業(yè)級應用軟件為例,講述如何將其擴展為后期可自由設置多國語言的一款多語言應用程序。將界面顯示信息以模板格式保存在XML文檔中,軟件啟動時讀取界面顯示語言值,對應用程序界面顯示文本進行動態(tài)設置,用這種方法實現(xiàn)不受語言數(shù)量限制的應用程序的多語言版本。為了在后期使用中可以自由方便的添加語言,對應開發(fā)語言文件生成軟件,添加新語言時只需要添加新語言的顯示文本的語言值,生成語言文件即可在軟件中使用新增語言的界面。這種方法開發(fā)周期短,應用程序語言種類可以動態(tài)增減,適用于新軟件多語言開發(fā)和成型軟件的語言拓展,減少軟件的升級和維護的工作量。

      關鍵詞:XML;動態(tài)多語言;模板;壓縮;語言值;生成

      中圖分類號:TP311.1

      適用于多國語言使用的軟件需要多種不同的語言界面支持,而軟件開發(fā)過程中,不是所有軟件開始設計時就考慮到可能會用到多國語言。在后期擴展時,如果能夠做到語言的自由擴展而不必重復編譯軟件,將為軟件使用帶來極大便捷,減少開發(fā)和維護成本,免除多語言界面的二次開發(fā),縮短開發(fā)周期。

      由于計算機的飛速發(fā)展,軟件行業(yè)的發(fā)展也突飛猛進,軟件數(shù)量數(shù)不勝數(shù)[1]。而一般軟件開發(fā)時,不一定考慮到以后的使用過程中可能會用到多語言界面,即使使用多語言界面可能也不會考慮后期新增語言,在開發(fā)時都以一種或固定幾種語言來開發(fā)[2,3]。后期使用中遇到新增語言時,為了保持軟件可用性,就需要進行升級維護和二次開發(fā),為軟件開發(fā)增加額外成本和延長開發(fā)周期[4,5]。軟件使用的語言種類越多,軟件二次開發(fā)次數(shù)就會越多,對于軟件產(chǎn)權(quán)所有方而言,增加的維護成本就會越高,開發(fā)周期就會越長,隨之帶來的問題就會越多[6,7]。

      文中研究的方法是在軟件啟動時加載語言文件,根據(jù)語言文件的設置加載指定語言值信息,界面初始化時更新界面顯示。將所有語言信息合并保存在一個文件中,首次使用軟件時提示選擇語言種類,軟件啟動時將默認語言的語言值信息加載到公共類中,加載語言文件后動態(tài)添加語言菜單,更改顯示語言時立即更改。后期增加語言時,使用語言文件生成軟件添加新的語言值信息,重新生成語言文件替換即可,單文件語言文檔使非開發(fā)人員自主維護非常方便和簡單。所述軟件使用C#編程語言基于.NetFramework2.0開發(fā),文中方法以C#編程為例進行講述。

      1 預備知識

      微軟.NETFramework程序集框架為軟件開發(fā)人員提供了高效的應用程序開發(fā)功能,遵守嚴格的命名規(guī)則,有豐富的控件可供使用,開發(fā)時形成樹狀的層次結(jié)構(gòu)[2-6]。

      XML是英文“Extensible Markup Language”的縮寫,中文名稱為“可擴展標記語言”,是W3C(World Wide Web Consortium)開發(fā)的一組標準[8,9]。XML作為微軟選擇的一種文件存儲標準,在.NETFramework中有著重要的作用,在.NETFramework中提供了專門的操作類對其進行處理,這些類包含在“System.Xml”命名空間中[10]。使用XmlDocument、XmlNode、XmlNodeList、XmlElement等類分別操作Xml文檔、節(jié)點、節(jié)點列表、Xml對象[11,12]。

      UTF表示通用轉(zhuǎn)換格式,UTF-8編碼是一種被廣泛應用的編碼,這種編碼致力于把全球的語言納入一個統(tǒng)一的編碼,UTF-8是UNICODE的一種變長字符編碼,目前UTF-8編碼方式幾乎可以包括了所有的語言字符[3,5]。

      XML支持UTF-8編碼[3,8],選用UTF-8編碼存儲多種語言的語言值信息,在進行語言設置時不會出現(xiàn)亂碼,C#默認創(chuàng)建XML使用UTF-8格式。盡管如此,在多語言下使用通用格式時需要選擇一種通用的字體格式,以免在不同語言下界面顯示出現(xiàn)錯亂,導致視覺效果變差,可以選擇一種通用字體,比如“Calibri”字體[5],或者在選擇不同語言時設置不同字體。

      XML標記的文檔內(nèi)容是公開的,使用記事本等文本編輯工具均可打開[9]。在使用XML存儲語言值信息時,如果信息量較大,在進行文檔處理時要使用循環(huán)讀取和賦值從而減少編程的勞動強度、優(yōu)化代碼和算法。同時,我們進行的是在一種語言值開發(fā)完成的軟件基礎上升級開發(fā),在沒有語言文件時加載默認語言,語言文件具有固定模板格式,這樣就需要XML存儲的語言文件不可被用戶可視化編輯。這里考慮的一種方法就是將文檔壓縮,以避免語言文件被修改后語言值信息加載不完整,導致界面出現(xiàn)多種語言值顯示,壓縮后的語言文件在加載時如果被破壞則提示錯誤并加載默認界面。

      2 語言文檔創(chuàng)建

      2.1 XML語言文件模板

      根據(jù)上一節(jié)所述的內(nèi)容,首先編寫XML語言文件的格式。

      設置節(jié)點作為語言文件的根節(jié)點。在根節(jié)點下添加節(jié)點存儲默認語言文件名稱,添加節(jié)點對象設置默認語言為“中文”。在根節(jié)點下設置子節(jié)點存儲語言菜單項,該項為軟件啟動時動態(tài)加載的語言列表,有多少種語言這個節(jié)點就有多少個節(jié)點對象,這個子節(jié)點就用來實現(xiàn)動態(tài)添加語言種類。

      在根節(jié)點下添加保存各語言下各窗體的顯示信息,在此節(jié)點下以語言種分類創(chuàng)建子節(jié)點,若有“中文”、“英語”兩種語言,則對應這兩種語言創(chuàng)建兩個子節(jié)點,在語言子節(jié)點下以窗體名稱命名繼續(xù)創(chuàng)建子節(jié)點,在每個窗體下分別設置窗體名稱和窗體控件子節(jié)點,用來存儲每個窗體在對應語言下的顯示文本和各個控件的顯示文本。

      XML模板文檔的結(jié)構(gòu)如下:

      圖1 語言文檔XML模板格式

      節(jié)點“中文”和“英語”下可繼續(xù)添加其他窗體的顯示信息,在“中文”、“英文”節(jié)點下繼續(xù)添加節(jié)點即可,若添加其他語言在下添加對應信息,并進行語言值擴展即可,窗體的顯示信息中繼續(xù)添加對應語言顯示的語言值即可。

      若需要添加其他提示信息,比如MessageBox要顯示的信息,可以通過添加節(jié)點存儲這些信息,在讀取時賦值給全局變量。

      2.2 語言包創(chuàng)建軟件編寫

      編制好XML模板文檔以后,就可以根據(jù)這個模板編寫軟件生成和編輯語言文件。

      將軟件中所有窗體上需要更改語言顯示的控件按照窗體名稱定義為多個靜態(tài)的字符串數(shù)組,將對應需要更改顯示的中文語言值定義為靜態(tài)字符串數(shù)組。語言文件編輯軟件主界面如下:

      圖2 語言包生成軟件主界面

      新建默認語言時,按照創(chuàng)建的靜態(tài)字符串數(shù)組遍歷自動生成“中文”語言為默認語言的語言文件。添加新語言“英語”后“語言”節(jié)點增加“英語”子節(jié)點,并且節(jié)點內(nèi)容列表如圖所示,在“添加值”文本框中按行輸入要顯示的對應信息后將語言值添加進對應列表中。

      可以從txt文本文檔中逐行讀取語言值,并使用“加值”按鈕添一鍵加到列表。添加完畢后點擊“檢驗”按鈕檢驗所有節(jié)點值是否已經(jīng)設置完成,若設置完成則手動保存完成新語言添加,若有空值則繼續(xù)添加直至所有節(jié)點值添加完畢后保存。

      若需檢查語言的各個語言值內(nèi)容,選擇對應節(jié)點即可在列表中顯示。完成后可手動測試或一鍵測試新添加的語言,核對語言值信息和顯示狀態(tài)。

      2.3 壓縮XML文件

      如上節(jié)所述,為了防止語言文件被異常修改,將存儲語言值信息的XML文檔“LanguageConfig.xml”壓縮并命名為“LanguageConfig.lang”,壓縮算法多樣,可根據(jù)情況選取。

      壓縮后的文件用文本編輯器等讀取時不可識別,若壓縮后的文件被修改,則解壓時提示語言文件錯誤并加載默認中文界面。

      3 加載語言文件實現(xiàn)多語言界面

      3.1 設置語言界面

      編寫對應解壓算法,在主窗體加載之前,由文件“LanguageConfig.lang”解壓出“LanguageConfig.xml”作為臨時文件,讀取完畢后刪除。

      創(chuàng)建公共靜態(tài)類,從xml文件加載語言信息到公有靜態(tài)XmlDocument對象。檢查默認語言,若默認語言為空則彈出語言選擇窗體,列出語言文件中所有可用的語言在對應語種下的名稱,用于第一次啟動軟件時選擇對應的語言。將語種名稱以對應語種的語言值顯示在列表中,語言選擇界面如下圖所示:

      圖3 首次啟動語言選擇界面

      選擇語言后雙擊,設置并保存默認語言。從公有XmlDocument對象中讀取對應語言的語言值信息,并初始化主窗體。主窗體初始化時,讀取語言文件中節(jié)點下所有語言列表并動態(tài)加載到“語言”菜單項下,從而實現(xiàn)語言文件設置了幾種語言軟件啟動時主窗體就可以動態(tài)的顯示有幾種語言可用。動態(tài)語言菜單顯示如下:

      圖4 軟件啟動后動態(tài)加載語言菜單

      窗體初始化時,遍歷窗體所有控件并存儲,將與控件名與語言值的節(jié)點對象名稱進行對比,若找到對應的值則將控件顯示內(nèi)容設置為對應語言的信息顯示出來。

      加載“中文”、“English”兩種語言后窗體顯示情況使用子窗體“當前鉆孔信息”為例進行說明,子窗體顯示如圖5所示。

      圖5 中英文顯示界面示例

      3.2 窗體布局調(diào)整

      變更語言設置后,窗體控件可能需要重新布局,以便適應窗體顯示位置和大小。軟件基于“中文”語言開發(fā),窗體初始化時仍按照中文語言進行初始化,然后再逐個更新顯示不同語言的文本內(nèi)容,同一條文本信息在不同語言下對應文本的長度不同,為了保證軟件界面可視效果良好,需要重新調(diào)整窗體布局。

      定義整型變量賦值記錄窗體初始化以后語言改變之前的控件的位置。加載語言后窗體布局改變,計算語言變化后控件的位置。比較相關控件,計算布局變化值進行控件的調(diào)整。在布局調(diào)整時,可能需要進行多次調(diào)整才能使窗體布局可視效果良好。這種布局調(diào)整為多語言界面提供了標準的適應性方法,保證在不同語言下視覺效果良好。

      3.3 獨立于操作系統(tǒng)語言的控件顯示

      對于某些信息,比如MessageBox提示對話框的按鈕“是”、“否”、“確定”、“取消”,對于中文操作系統(tǒng)而言其始終顯示為中文,必須將操作系統(tǒng)語言設置為英文才可隨系統(tǒng)對應更改為“Yes”、“No”、“OK”、“Cancel”。

      假如需要在英文操作系統(tǒng)中使用中文或俄文,那么MessageBox中按鈕等文字顯示的就會是英文,如果還使用了其他控件也會產(chǎn)生類似的狀態(tài),這將給用戶帶來不便,可能使軟件的用戶體驗大打折扣。

      對于這類情況,我們借鑒和參考部分資料對控件進行重寫,使控件中需要修改顯示的內(nèi)容作為參數(shù)進行傳遞。重寫后的MessageBox調(diào)用如下:

      圖6 重寫控件調(diào)用代碼

      其中,LanguageConfig.List_Tips[*]是軟件語言文件中設置的語言值,在使用控件時調(diào)用語言值傳遞給MessagBox對話框,這些值存儲在語言文件中。

      重寫后的MessageBox選擇“English”和“中文”運行時分別顯示如下圖:

      圖7 重寫控件顯示示例

      其它需要修改顯示內(nèi)容的控件也可以進行重寫,在使用控件時將對應語言的值傳遞給控件使用。

      4 多語言顯示效果

      下圖為軟件加載中文、英語、俄語三種語言后的界面顯示效果圖,選擇主窗體的“文件”菜單為例,截圖如下:

      圖8 中英俄三語種菜單示例

      5 結(jié)束語

      上面研究的顯示多語言界面的方法,將面界面文本信息獨立存儲在XML文檔中,并對XML文檔進行壓縮保存。在需要增加新的顯示語言時,只需要翻譯對應界面顯示文本的語言值,填入語言生成軟件重新生成語言包即可。軟件啟動時動態(tài)加載語言包內(nèi)的語言,并在語言菜單中列出。

      這一方法減少了增加顯示語言而帶來的系統(tǒng)測試,從而減少了工作量使軟件開發(fā)周期縮短;還可以同時發(fā)布不同的語言版本的應用程序或者縮小不同語言版本程序的發(fā)布時間。

      參考文獻:

      [1]經(jīng)典原版書庫.Sommerville I.(軟件工程第8版)Software Engineering,Eighth Edition[M].北京:機械工業(yè)出版社,2006.

      [2]王昊亮,李剛.VisualC#程序設計教程[M].北京:清華大學出版社,2003.

      [3]李敏波.C#高級編程(第4版)[M].北京:清華大學出版社,2005.

      [4]薛興濤,袁勤勇.C#軟件項目開發(fā)全程剖析[M].北京:清華大學出版社,2003.

      [5]Erik Brown.朱毓斌,吳飛,譯.C# Windows Forms程序設計[M].北京:清華大學出版社,2003.

      [6]湯朵 吉米拜爾.楊濤,譯.C#程序設計[M].北京:機械工業(yè)出版社,2004.

      [7]王小科,王軍.C#開發(fā)實戰(zhàn)1200例(I)(II)[M].北京:清華大學出版社,2011.

      [8]W3C.延伸性標注語言(XML)[OL].http://www.w3.org/XML.

      [9]Dinar Dalvi,Joe Gray.英宇,林琪,譯..NET XML高級編程[M].北京:清華大學出版社,2002.

      [10]王鋒,魏曉麗,江開耀.基于XML的C#多語言界面實現(xiàn)[J].計算機工程與設計,2008(15):4073-4074.

      [11]張曉琳,霍偉,劉立新.連續(xù)不確定XML數(shù)據(jù)查詢處理算法[J].計算機工程與設計,2013(07):2426-2430.

      [12]黃理.XSP/Cocoon/XML核心技術(shù)內(nèi)幕[M].北京:希望電子出版社,2002.

      作者簡介:張先韜(1986-),男,山東泰安人,碩士,研究方向:軟件開發(fā)、粗糙集、模糊集、智能算法等;黃麟森(1981-),男,湖南郴州人,碩士,助理研究員,主要從事礦山機電設備等研究。

      作者單位:中煤科工集團重慶研究院有限公司,重慶 400039;瓦斯災害監(jiān)控與應急技術(shù)國家重點實驗室,重慶 400039

      基金項目:中煤科工集團重慶研究院有限公司青年基金項目“測斜探管軟件校準方法研究”(項目編號:2013QNJJ16)。

      武鸣县| 武乡县| 安义县| 利辛县| 满城县| 永丰县| 耿马| 游戏| 满城县| 贺兰县| 内丘县| 邵阳县| 马公市| 金秀| 墨江| 娄烦县| 南投市| 图木舒克市| 井陉县| 民丰县| 丹巴县| 荃湾区| 黔南| 蒲江县| 柘城县| 莲花县| 三穗县| 瑞昌市| 左权县| 石泉县| 界首市| 福州市| 高邑县| 巴东县| 枣庄市| 鄂温| 望江县| 皮山县| 灵寿县| 保定市| 肃宁县|