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