摘要:在分析多語言軟件用戶界面的多種實現(xiàn)技術(shù)的基礎(chǔ)上,提出基于數(shù)據(jù)庫技術(shù)的多語言軟件用戶界面解決方案。該方案可以輕松實現(xiàn)不同語言的切換。維護(hù)方便。
關(guān)鍵詞:數(shù)據(jù)庫技術(shù);多語言;用戶界面;SQL;Unicode
0 引言
隨著計算機(jī)應(yīng)用的不斷深入、全球信息化水平的不斷提高,軟件產(chǎn)品也正趨向國際化,越來越多的軟件產(chǎn)品支持多語言用戶界面,能給不同國家和不同語言用戶提供本地化的操作環(huán)境,有效提高了客戶滿意度。
多語言軟件用戶界面有多種實現(xiàn)技術(shù):多獨立應(yīng)用程序技術(shù)、多語言的純資源DLL技術(shù)、多獨立單資源的純資源DLL技術(shù)、引用外部語言包技術(shù)等。前面三種實現(xiàn)技術(shù)都要求更新源代碼才能新添語言,用戶在不同語言間切換缺少靈活性,語言信息的維護(hù)比較困難;第四種實現(xiàn)技術(shù)雖然可以自由添加新的語言,但語言信息的維護(hù)仍然比較困難。
本文提出的基于據(jù)數(shù)據(jù)庫技術(shù)的多語言軟件用戶界面解決方案,以SQL Server為平臺,建立語言方案數(shù)據(jù)庫,將不同語言方案軟件界面元素的顯示信息存于指定數(shù)據(jù)庫,應(yīng)用程序從該數(shù)據(jù)庫提取指定語言的顯示信息,動態(tài)更新軟件的用戶顯示界面。用戶可以在不同語言方案間自由切換,而且系統(tǒng)自動即時更新顯示界面;開發(fā)人員(其實從技術(shù)角度講,并不要求一定是開發(fā)人員,任何有授權(quán)的用戶都可以完成)不需要修改任何源代碼就可以自由增刪語言方案,輕松維護(hù)各語言方案的所有信息。考慮到不同語言的顯示效果,在選擇數(shù)據(jù)庫管理系統(tǒng)和應(yīng)用程序開發(fā)工具時,一定要選擇支撐Unicode字符編碼的開發(fā)工具。
1 多語言軟件用戶界面分析
軟件界面主要有數(shù)據(jù)信息和提示信息,數(shù)據(jù)信息一般直接來自數(shù)據(jù)庫,用戶可在系統(tǒng)數(shù)據(jù)錄入時實現(xiàn)本地化,因此多語言軟件用戶界面本地化主要針對提示信息進(jìn)行。根據(jù)提示信息與數(shù)據(jù)庫的相關(guān)性提示信息可分為三類:數(shù)據(jù)庫無關(guān)提示信息,如按鈕標(biāo)題,菜單標(biāo)題、對話框信息等;字段相關(guān)提示信息,如數(shù)據(jù)綁定文本框前的標(biāo)簽提示信息;表(數(shù)據(jù)表、數(shù)據(jù)查詢、數(shù)據(jù)視圖)相關(guān)的提示信息,如DBgrid的列標(biāo)題。
對于與數(shù)據(jù)庫無關(guān)的提示信息,可以建立信息表,將所有提示信息添加到該表;對于與字段相關(guān)的提示信息,可以從數(shù)據(jù)庫的syscolumns表提取字段信息,從sysobjects表提取表信息,然后將其存入信息表;對于表相關(guān)的提示信息,不需要在信息表存儲任何信息,可將其數(shù)據(jù)源表名和當(dāng)前語言方案編號存于界面元素當(dāng)前信息表中,根據(jù)數(shù)據(jù)源表字段和當(dāng)前語言方案編號信息,在信息表中動態(tài)的選擇對應(yīng)字段的當(dāng)前顯示文本。
信息表建立過程如下:首先,根據(jù)syscolumns表和sysobjects表獲取字段信息項目,將其存入信息表,根據(jù)庫軟件項目界面確定界面元素;對于數(shù)據(jù)庫無關(guān)提示信息的信息項目則通過手工方法加入信息表中。其次,建立界面元素與信息表映射,確定界面元素與信息表對應(yīng)關(guān)系。再次根據(jù)當(dāng)前語言方案確定界面的顯示文本。最后將其應(yīng)用到軟件項目中。處理流程如圖1所示。
2 主要表設(shè)計
(1)語言方案表Language_TABLE。用于存儲各個語言方案基本信息。其關(guān)鍵字段如表1所示。LID字段自動生成,第一個語言方案的編號為“00001”;L_state有兩個值,0表示有效,1表示禁用。
(2)信息表Message_TABLE。用于存儲各個信息元素的不同語言文本,其關(guān)鍵字段如表2所示。對于數(shù)據(jù)庫無關(guān)提示信息,M_ID采用系統(tǒng)自動編碼;對與字段相關(guān)提示信息,M_ID采用“表名_字段名”的規(guī)則表示。
(3)界面元素當(dāng)前信息表ProjectSelMsg TABLE。用于存儲各個界面元素當(dāng)前語言方案顯示信息,其關(guān)鍵字段如表3所示。部分對象多個屬性需要本地化,因此系統(tǒng)以屬性作為基本單位。P_Object字段用來識別控件所處的位置,在程序中還可以P_Object為選擇條件,一次性將該窗體或報表所有界面元素全部從信息表中讀出,減少查找時間,提高效率。對于非表相關(guān)信息,M_ID用來存儲信息編號;對于表相關(guān)信息,則保存控件數(shù)據(jù)源的表名。P_SelText字段屬于冗余字段,對于非表相關(guān)信息,用來存儲該界面元素在當(dāng)前語言方案條件下的顯示文本,減少在信息表中查詢時間,以空間換時間;對于表相關(guān)信息,則用來存儲當(dāng)前語言方案編號。Type字段有三個值:0表示數(shù)據(jù)庫無關(guān)提示信息;1表示字段相關(guān)提示信息;2表示表相關(guān)信息。
(4)表間關(guān)系,通過LAD字段為表Language_TABLE和表Message_TABLE建立關(guān)聯(lián)。
3 方案設(shè)計
基于數(shù)據(jù)庫技術(shù)的多語言軟件用戶界面解決方案如圖2所示。
(1)“語言方案選擇處理”可放置在應(yīng)用項目的系統(tǒng)選項設(shè)置中,用下拉列表框顯示系統(tǒng)所有有效語言方案供用戶選擇,用戶選擇某個方案后記錄方案編號。當(dāng)用戶確認(rèn)選擇且關(guān)閉選項設(shè)置窗體時,對于非表相關(guān)信息,根據(jù)用戶所選語言方案編號,用Message_TABLE表對應(yīng)文本更新ProjeetSetMsg_TABLE表中各個界面元素的顯示文本,即P_SelText字段值;對于表相關(guān)提示信息,則將選擇選擇的語言方案編號存于P_SelText。
(2)“界面元素項目導(dǎo)入”用于確定界面元素的項目,可手工處理,也可讓自動掃描窗體的控件,然后手工確定界面元素對應(yīng)的控件屬性即可。它屬于臨時處理模塊,項目導(dǎo)入后即要清除相關(guān)代碼。將所有界面元素信息全部存入表Project-SelMsg_TABLE中。
(3)“報表界面處理”放在報表設(shè)計模塊中。讀取Project-SelMsg_TABLE中各界面元素對應(yīng)的P_SelText值,實現(xiàn)報表界面元素的本地化。
(4)“窗體界面處理”放在報表設(shè)計模塊中。對于數(shù)據(jù)庫無關(guān)提示信息和字段相關(guān)信息,讀取ProjectSelMsg_TABLE中各界面元素對應(yīng)的P_SelText值,實現(xiàn)窗體界面元素的本地化;對于表相關(guān)提示信息,則在M_ID中讀取表名,獲最該表的相關(guān)字段,然后根據(jù)P_SelText的值,在Message_TABLE表中提取各字段對應(yīng)的顯示文本。
(5)“語言方案信息維護(hù)”主要提供語言方案的增加、修改、刪除、狀態(tài)修改等操作。每增加一個新的語言,除了在Language_TABLE表中增加記錄外,還要在Messag_TABLE為每個項目添加此語言文本。刪除語言方案時,不僅要刪除Language_TABLE表中對應(yīng)信息,還要刪除Message_TABLE表中信息。因為項目界面元素項目多,信息表中對應(yīng)信息量非常大,錄入相對費時,所以要慎用刪除功能。通過L_state可控制語言方案的狀態(tài),加強(qiáng)對語言方案的控制。
(6)“數(shù)據(jù)字段導(dǎo)入”用于自動將應(yīng)用系統(tǒng)數(shù)據(jù)庫的各個字段添加到信息表中??梢詮臄?shù)據(jù)庫的syseolumns表提取字段信息,從sysobjects表提取表信息,按“表名一字段名”規(guī)則組合,存于ProjectSelMsg_TABLE的P_ID字段。初始導(dǎo)入時LID的值全部設(shè)為“00001”;非初始導(dǎo)入時,提示輸入該項目已有各語言方案的顯示文本。
(7)“手工添加信息表元素項目”用于處理與數(shù)據(jù)庫無關(guān)信息元素項目的確定,信息元素編號自動生成。初始導(dǎo)入時LID的值全部設(shè)為“00001”;非初始導(dǎo)入時,提示輸入該項目已有各語言方案的顯示文本。
(8)“界面元素與信息表映射處理”用來建立界面元素與信息表的對應(yīng)關(guān)系。對于非表相關(guān)信息,將Message_TABLE表中的M_ID值,存入ProjectSelMsg_TABLE對應(yīng)界面元素的M_ID字段中;對于表相關(guān)信息,則將該控件的數(shù)據(jù)源表名存入M_ID中。
(9)“信息表維護(hù)”主要提供信息元素的修改功能。系統(tǒng)每增加一種新的語言,此表自動按信息元素個數(shù)N,新增N條記錄,自動填充M_ID元素編號,L_ID自動填充新增語言方案的編號,通過修改功能給每個語言元素輸入新語言的對應(yīng)的文本。
(10)“導(dǎo)入導(dǎo)出”用于各表數(shù)據(jù)的導(dǎo)入與導(dǎo)出。提供兩種導(dǎo)入方式:覆蓋導(dǎo)入和追加導(dǎo)入。
4 結(jié)束語
本方案已成功應(yīng)用到廣州一軟件公司開發(fā)的餐飲管理系統(tǒng)。在用戶界面語言切換方面,客戶滿意度高。系統(tǒng)添加新語言操作簡便,只要更新相應(yīng)的信息表即可,這些表獨立于程序,信息表的修改不影響程序的正常運行,軟件升級方便。本方案還存在一些不足,受開發(fā)工具本身的限制,部分元素如系統(tǒng)提供的公共對話框中的按鈕等不能完全本地化。