摘 要: 傳統(tǒng)的中英文網(wǎng)站開(kāi)發(fā)采用兩套代碼兩個(gè)數(shù)據(jù)庫(kù)或者一套代碼兩套資源文件的開(kāi)發(fā)模式,在軟硬件開(kāi)銷、代碼與信息分離和系統(tǒng)的維護(hù)性方面均存在不同程度的缺陷。針對(duì)這一問(wèn)題,把頁(yè)面設(shè)計(jì)與數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)合起來(lái),利用編程技術(shù),用一套代碼一個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)中英文雙語(yǔ)網(wǎng)站的開(kāi)發(fā),以提高開(kāi)發(fā)及維護(hù)效率,降低軟件成本。
關(guān)鍵詞: 雙語(yǔ)網(wǎng)站;內(nèi)容管理系統(tǒng);數(shù)據(jù)庫(kù);靜態(tài)內(nèi)容;動(dòng)態(tài)內(nèi)容
我國(guó)一些具有國(guó)際戰(zhàn)略眼光的企業(yè),不僅建立了企業(yè)品牌中文網(wǎng)站,而且還建設(shè)了網(wǎng)站外文版[1]。英語(yǔ)是當(dāng)今世界上主要的國(guó)際通用語(yǔ)言之一,為了逾越系統(tǒng)使用者中文要求的限制以及滿足企業(yè)業(yè)務(wù)的需要,建立中英文雙語(yǔ)管理信息系統(tǒng)網(wǎng)站是企業(yè)實(shí)現(xiàn)國(guó)際化管理的有效途徑[1]。
目前通常采用的方法有以下兩種[2]:第一種是開(kāi)發(fā)兩套系統(tǒng),即中英文系統(tǒng)自成體系,用兩套程序和兩個(gè)數(shù)據(jù)庫(kù)分別實(shí)現(xiàn);第二種是使用一套程序,針對(duì)每個(gè)頁(yè)面分別生成中英文兩個(gè)資源文件以實(shí)現(xiàn)兩種語(yǔ)言之間的切換,數(shù)據(jù)庫(kù)可以用兩個(gè),也可以用一個(gè)。第一種方法實(shí)現(xiàn)容易,但是其開(kāi)發(fā)、測(cè)試及維護(hù)效率均很低下;第二種方法開(kāi)發(fā)效率相對(duì)較高,但由于存放中英文靜態(tài)內(nèi)容的資源文件與代碼密不可分,不利于系統(tǒng)的維護(hù)。為克服上述開(kāi)發(fā)模式的不足,本文選擇Microsoft Visual Studio.Net平臺(tái)的C#,提出一套基于C#的雙語(yǔ)網(wǎng)站設(shè)計(jì)模式,設(shè)計(jì)一個(gè)靜態(tài)信息表,將中英文靜態(tài)內(nèi)容存放于該表的不同字段,系統(tǒng)啟動(dòng)時(shí)一次性讀出中英文靜態(tài)內(nèi)容并存放于DataTable對(duì)象中,各頁(yè)面啟動(dòng)時(shí)依據(jù)頁(yè)面編號(hào)和語(yǔ)言標(biāo)志從DataTable中讀取并顯示靜態(tài)內(nèi)容;對(duì)頁(yè)面動(dòng)態(tài)內(nèi)容,在各信息表中設(shè)計(jì)兩個(gè)字段分別存放需要顯示的中英文內(nèi)容,根據(jù)頁(yè)面的語(yǔ)言標(biāo)志來(lái)讀取對(duì)應(yīng)字段內(nèi)容動(dòng)態(tài)顯示于頁(yè)面。即用一套代碼一個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)中英文雙語(yǔ)網(wǎng)站的開(kāi)發(fā)。
1 系統(tǒng)需求
本文以某企業(yè)的法律規(guī)章制度的管理信息系統(tǒng)為例來(lái)說(shuō)明雙語(yǔ)網(wǎng)站的實(shí)現(xiàn)。
(1)在業(yè)務(wù)需求方面,該系統(tǒng)旨在通過(guò)各地區(qū)(不同國(guó)家或區(qū)域)工作人員將各地區(qū)與本企業(yè)產(chǎn)品相關(guān)的產(chǎn)品安全標(biāo)準(zhǔn)和法律規(guī)章制度提取出來(lái),按本企業(yè)的管理方式以中英文雙語(yǔ)錄入系統(tǒng),經(jīng)過(guò)主管部門確認(rèn)后,向本企業(yè)各部門及業(yè)務(wù)往來(lái)公司公開(kāi),使企業(yè)產(chǎn)品在不違反銷售對(duì)象國(guó)家及區(qū)域的法律制度的條件下進(jìn)行合法營(yíng)銷。而目前的管理完全是通過(guò)手工制作Html文件的方式實(shí)現(xiàn)信息共享,這種方式既繁瑣且工作量大。為了優(yōu)化系統(tǒng)管理,本文提出利用數(shù)據(jù)庫(kù)及網(wǎng)站開(kāi)發(fā)平臺(tái)來(lái)進(jìn)行系統(tǒng)的設(shè)計(jì)及開(kāi)發(fā)。
(2)在功能需求方面,該系統(tǒng)用來(lái)管理與企業(yè)相關(guān)產(chǎn)品的法律規(guī)章制度,類似于一般管理信息系統(tǒng)的功能:法律規(guī)章制度的追加、修改、刪除、查詢及報(bào)表的制作。此外,由于規(guī)章制度類信息篇幅較長(zhǎng),以電子文檔方式保存的較多,因此,本系統(tǒng)還涉及電子文檔的追加、修改、刪除、查詢功能,即上傳、下載及文件瀏覽功能。
(3)在環(huán)境需求方面,由于雙語(yǔ)網(wǎng)站面向的用戶的多樣性,要求客戶端在以下4種組合的環(huán)境下能正常動(dòng)作,因此,集成測(cè)試及系統(tǒng)測(cè)試也必須在這4種組合環(huán)境下進(jìn)行:①中文WindowsXP、中文IE6;②英文WindowsXP、英文IE6;③中文WindowsVista、中文IE7;④英文WindowsVista、英文IE7。
(4)在安全需求方面,只有獲得本系統(tǒng)用戶名和密碼的用戶通過(guò)登錄頁(yè)面驗(yàn)證方可進(jìn)入主菜單頁(yè)面,但進(jìn)入主菜單的用戶權(quán)限各不相同,即不是進(jìn)入主菜單的用戶就能進(jìn)入所有菜單項(xiàng),通過(guò)對(duì)用戶進(jìn)行使用權(quán)限的設(shè)置及檢查,控制不同用戶對(duì)不同菜單項(xiàng)的使用權(quán)限;同時(shí)需要有效防止不經(jīng)過(guò)菜單頁(yè)面權(quán)限檢查,在IE地址欄直接輸入IP地址非法進(jìn)入各業(yè)務(wù)頁(yè)面訪問(wèn)。
2 雙語(yǔ)對(duì)應(yīng)設(shè)計(jì)
為了提高雙語(yǔ)網(wǎng)站的可維護(hù)性,利用一套代碼、一個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)雙語(yǔ)網(wǎng)站的構(gòu)建。其主要實(shí)現(xiàn)技術(shù)主要包括頁(yè)面設(shè)計(jì)、數(shù)據(jù)庫(kù)表的設(shè)計(jì)和文件管理設(shè)計(jì)三個(gè)方面。
2.1 頁(yè)面設(shè)計(jì)
利用C#進(jìn)行網(wǎng)站開(kāi)發(fā),其頁(yè)面顯示的內(nèi)容主要包含靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容兩類。在設(shè)計(jì)中,頁(yè)面靜態(tài)內(nèi)容并非像通常設(shè)計(jì)那樣設(shè)置為固定值,而是從數(shù)據(jù)庫(kù)的“靜態(tài)信息表”讀??;頁(yè)面中同一控件的顯示屬性可以根據(jù)不同環(huán)境分別顯示為中文與英文。為了便于設(shè)計(jì)及編程實(shí)現(xiàn),將各頁(yè)面的控件按統(tǒng)一方式進(jìn)行編號(hào)設(shè)計(jì),本文用5位符號(hào)字符對(duì)控件進(jìn)行編號(hào),編號(hào)規(guī)則如下:
第1位:用@表示所有頁(yè)面共同的顯示項(xiàng),用#表示各頁(yè)面專用的顯示項(xiàng)。
第2、3位:按控件種類劃分,用字符表示:
ID:頁(yè)面名;
NV:向?qū)淖郑?br />
LI:文字+鏈接;
FL:文字+輸入(文本框,單、復(fù)選按鈕,組合框等);
NA:僅顯示文字;
BT:按鈕名;
IM:畫像文件名。
第4、5位:同種類控件按序編號(hào),用數(shù)字表示。
頁(yè)面設(shè)計(jì)中的上述編號(hào),對(duì)應(yīng)數(shù)據(jù)庫(kù)的“靜態(tài)信息表”的字段“頁(yè)面控件編號(hào)”,不同頁(yè)面的控件編號(hào)基本一致,以“頁(yè)面編號(hào)”和“頁(yè)面控件編號(hào)”為主鍵來(lái)區(qū)分不同記錄。
設(shè)計(jì)示例如圖1所示(假設(shè)頁(yè)面編號(hào)為WWDG001),圖中DA01和DA02為動(dòng)態(tài)內(nèi)容項(xiàng),其編號(hào)不存放于數(shù)據(jù)庫(kù)表的某一字段,只作為設(shè)計(jì)和編程中動(dòng)態(tài)項(xiàng)目的對(duì)照依據(jù)。
2.2 數(shù)據(jù)庫(kù)相關(guān)表的設(shè)計(jì)
本系統(tǒng)雙語(yǔ)功能的實(shí)現(xiàn)主要借助于數(shù)據(jù)庫(kù)設(shè)計(jì)。首先定義了一個(gè)“靜態(tài)信息表”,在該表中定義了頁(yè)面編號(hào)、頁(yè)面控件編號(hào)、中英文名稱等字段,主鍵為頁(yè)面編號(hào)和頁(yè)面控件編號(hào),該表用來(lái)存放各個(gè)頁(yè)面所有靜態(tài)內(nèi)容的中英文顯示內(nèi)容。針對(duì)WWDG001頁(yè)面,靜態(tài)信息表內(nèi)容如表1所示。
對(duì)于頁(yè)面動(dòng)態(tài)內(nèi)容,在每一個(gè)數(shù)據(jù)庫(kù)的表中,對(duì)需要雙語(yǔ)顯示的信息分別設(shè)置了中英文兩個(gè)字段來(lái)存放相應(yīng)的信息。針對(duì)WWDG001頁(yè)面,其動(dòng)態(tài)顯示內(nèi)容來(lái)自于商品管理表,其內(nèi)容如表2所示。頁(yè)面動(dòng)態(tài)消息和消息框消息也以中英文存放于消息管理表中,其內(nèi)容如表3所示。
根據(jù)數(shù)據(jù)庫(kù)內(nèi)容,中英文頁(yè)面內(nèi)容顯示如圖2所示。
2.3 中英文文件管理
本系統(tǒng)管理的對(duì)象信息除數(shù)據(jù)庫(kù)信息之外,還涉及篇幅較大的中英文文檔信息。本文將這些文件存放于Web服務(wù)器一指定路徑下,將中英文文件分別存放于“CHN”和“EN”兩個(gè)不同的文件夾下面(各文件夾內(nèi)部根據(jù)類別建立不同文件夾以便分類管理),實(shí)現(xiàn)時(shí),根據(jù)當(dāng)前頁(yè)面的語(yǔ)言類別,在“CHN”或“EN”文件夾中操作對(duì)應(yīng)文件。
2.4 中英文顯示內(nèi)容對(duì)應(yīng)
為了保持頁(yè)面布局的美觀和降低編程復(fù)雜度,設(shè)計(jì)時(shí),依據(jù)常規(guī)數(shù)據(jù)大小,將頁(yè)面顯示項(xiàng)目的位置和大小設(shè)為固定值。通常,英文信息比中文信息長(zhǎng),設(shè)計(jì)時(shí)以中文信息完全顯示為主,兼顧英文的完全顯示。對(duì)于中英文長(zhǎng)度差別較大的頁(yè)面項(xiàng)目(或太長(zhǎng)的中英文顯示項(xiàng)目),本設(shè)計(jì)按照頁(yè)面預(yù)留長(zhǎng)度截取適當(dāng)內(nèi)容顯示于頁(yè)面,利用<acronym>Tag,當(dāng)鼠標(biāo)置于未完全顯示文字之上時(shí),使其以工具提示的方式顯示全部?jī)?nèi)容。
2.5 頁(yè)面語(yǔ)言選擇依據(jù)
根據(jù)以下三方面決定各頁(yè)面語(yǔ)言的切換:(1)系統(tǒng)啟動(dòng)時(shí),啟動(dòng)用戶登錄頁(yè)面,將根據(jù)用戶所處區(qū)域決定打開(kāi)系統(tǒng)登錄頁(yè)面的顯示語(yǔ)言;(2)用戶登錄時(shí),通過(guò)輸入用戶名和密碼進(jìn)入系統(tǒng),系統(tǒng)根據(jù)用戶名檢索用戶的語(yǔ)言標(biāo)志,決定進(jìn)入系統(tǒng)的顯示語(yǔ)言;(3)各頁(yè)面設(shè)置了語(yǔ)言切換按鈕,用戶可根據(jù)需要隨時(shí)進(jìn)行語(yǔ)言切換[5]。為保證頁(yè)面切換過(guò)程中顯示語(yǔ)言的一致性,將語(yǔ)言標(biāo)志設(shè)置在母版頁(yè)WWDGBaseMasterPage.master的不可視文本框中,并利用context.Handler實(shí)現(xiàn)頁(yè)面間的語(yǔ)言標(biāo)志及其他值的傳遞。
3 系統(tǒng)實(shí)現(xiàn)
在系統(tǒng)實(shí)現(xiàn)中,注重執(zhí)行效率及代碼重用[3],其網(wǎng)站路徑構(gòu)成如圖3所示。圖中,Properties文件夾的AssemblyInfo.cs類文件用于保存程序集的名稱、版本等信息;Reference文件夾包含本系統(tǒng)的所有引用;App中包含若干公用類的代碼文件,其中Map文件夾包含若干存放著SQL腳本的XML文件;css文件夾中包含各類的疊層式樣表;Help文件夾中包含系統(tǒng)的幫助頁(yè)面;img文件夾中包含系統(tǒng)用到的所有圖片文件;Info文件夾中包含了本系統(tǒng)所有Web頁(yè)面,頁(yè)面設(shè)計(jì)及業(yè)務(wù)邏輯控制主要集中在這部分;js文件夾中包含各類JavaScript代碼文件。
3.1 Application_Start事件處理
頁(yè)面靜態(tài)顯示內(nèi)容是在頁(yè)面打開(kāi)時(shí)根據(jù)語(yǔ)言標(biāo)志動(dòng)態(tài)設(shè)定的。為加快頁(yè)面顯示速度,頁(yè)面靜態(tài)內(nèi)容在系統(tǒng)啟動(dòng)時(shí),一次性從數(shù)據(jù)庫(kù)讀出待用。因此,本設(shè)計(jì)在Global.asax的Application_Start事件中將所有靜態(tài)內(nèi)容從數(shù)據(jù)庫(kù)讀出保存于DataTable對(duì)象中,抽出信息包括:頁(yè)面編號(hào)、頁(yè)面控件編號(hào)、中文名稱和英文名稱。在各頁(yè)面初始顯示時(shí),以頁(yè)面編號(hào)和語(yǔ)言標(biāo)志為參數(shù),從DataTable對(duì)象中讀取對(duì)應(yīng)內(nèi)容,并設(shè)置頁(yè)面靜態(tài)內(nèi)容。此外,執(zhí)行過(guò)程中的Message也采用同樣的方式處理。其程序如下:
protected void Application_Start(object sender,EventArgs e
{ try
{ //WWDGCCommon公用類實(shí)例化
Camon.WWDG.App.Common.WWDGCCommon wwdgCCommon=new Camon.WWDG.App.Common.
WWDGCCommon();
//GetLabelInfo調(diào)用,取得靜態(tài)信息
wwdgCCommon.GetLabelInfo();//頁(yè)面首部URL取得
wwdgCCommon.GetheaderUrl();
//GetMessageList調(diào)用取得執(zhí)行過(guò)程中顯示的Message
wwdgCCommon.GetMessageList();
}
catch (Exception ex)
{ Camon.WWDG.App.Common.WWDGLog.GetLogger().errorLog(null,ex);}
}
3.2 母版頁(yè)及內(nèi)容頁(yè)基類的設(shè)計(jì)
將各個(gè)內(nèi)容頁(yè)相同的通用外觀提取出來(lái),做成一個(gè)母版頁(yè)WWDGBaseMasterPage.master。本系統(tǒng)的母版頁(yè)中包含頁(yè)眉、頁(yè)腳、導(dǎo)航菜單、返回按鈕、語(yǔ)言切換按鈕和一些靜態(tài)圖標(biāo)。只要將各內(nèi)容頁(yè)的MasterPageFile屬性設(shè)為“WWDGBaseMasterPage.master”,各內(nèi)容頁(yè)只需設(shè)計(jì)本頁(yè)面專用的內(nèi)容即可。母版頁(yè)對(duì)應(yīng)的后臺(tái)服務(wù)器代碼主要針對(duì)母版頁(yè)中控件的事件處理和靜態(tài)內(nèi)容的設(shè)定。此外,定義基類WWDGCBaseWebPage.cs,在該類的定義中包含各內(nèi)容頁(yè)通用的用戶信息及其他信息變量的定義和各頁(yè)面通用的事件處理(頁(yè)面初始化處理、數(shù)據(jù)新增、修改、刪除處理)等。WWDGCBaseWebPage.cs的代碼構(gòu)成為:
省略部分的處理包括:對(duì)WWDGCBaseWebPage繼承成員的派生以及新增加的成員定義。
3.3 系統(tǒng)安全控制
由于安全控制集中在登錄頁(yè)面及主菜單頁(yè)面,為了防止在IE地址欄直接輸入IP地址非法進(jìn)入各內(nèi)容頁(yè)訪問(wèn),在母版頁(yè)的各級(jí)頁(yè)面打開(kāi)前均需驗(yàn)證打開(kāi)該頁(yè)面前是否已經(jīng)過(guò)主菜單的權(quán)限驗(yàn)證[4]。在母版頁(yè)WWDGBase MasterPage.master中添設(shè)不可視文本框menuFlg,當(dāng)菜單頁(yè)面檢查通過(guò)時(shí),就將menuFlg的值設(shè)為有效值1,頁(yè)面切換時(shí)通過(guò)頁(yè)面?zhèn)髦?從上級(jí)頁(yè)面?zhèn)魅胂乱豁?yè)面)。在基類頁(yè)面初始化處理中進(jìn)行是否經(jīng)過(guò)主菜單的安全驗(yàn)證,驗(yàn)證通過(guò)則可進(jìn)入相應(yīng)頁(yè)面,否則顯示錯(cuò)誤提示頁(yè)面。
4 測(cè)試
在測(cè)試中發(fā)現(xiàn)的主要問(wèn)題有:(1)單元測(cè)試中,發(fā)現(xiàn)通過(guò)瀏覽器打開(kāi)服務(wù)器上的文件瀏覽時(shí),瀏覽器的標(biāo)題顯示了文件存放服務(wù)器的IP地址,屬安全性Bug,采用Iframe打開(kāi)文件對(duì)應(yīng)了瀏覽器標(biāo)題的非實(shí)名設(shè)定;(2)由于開(kāi)發(fā)環(huán)境和單元測(cè)試使用的IE6,在集成測(cè)試時(shí),發(fā)現(xiàn)在IE7中,頁(yè)面顯示出現(xiàn)異常。這是由于IE6和IE7對(duì)DIV Tag的寬默認(rèn)不一致導(dǎo)致,通過(guò)修改css的定義實(shí)現(xiàn)了本Bug的對(duì)應(yīng)。
本設(shè)計(jì)模式在日本Canon打印機(jī)及配件法規(guī)制管理系統(tǒng)的日英雙語(yǔ)網(wǎng)站開(kāi)發(fā)中使用,利用數(shù)據(jù)庫(kù)設(shè)計(jì)成功地實(shí)現(xiàn)了日英文雙語(yǔ)網(wǎng)站的開(kāi)發(fā),實(shí)際使用證明其性能良好、維護(hù)方便。采用這一設(shè)計(jì)模式,模擬實(shí)現(xiàn)了中英文雙語(yǔ)網(wǎng)站的設(shè)計(jì)與開(kāi)發(fā),與日英雙語(yǔ)網(wǎng)站開(kāi)發(fā)類似,存在同一內(nèi)容中英文文字長(zhǎng)短差異較大、部分英文頁(yè)面存在顯示內(nèi)容不完整的現(xiàn)象,只能通過(guò)鼠標(biāo)移上去才能瀏覽完整內(nèi)容。這一問(wèn)題還有待尋找一種更好的方法來(lái)克服,以求美觀和內(nèi)容完全顯示。
參考文獻(xiàn)
[1] 舒詠平,王偉瑋.缺憾的自主傳播——自主品牌網(wǎng)站英文版的實(shí)證分析[J].現(xiàn)代傳播(中國(guó)傳媒大學(xué)學(xué)報(bào)),2010(6):117-118.
[2] 張亞娟,付輝,王學(xué)春.基于動(dòng)態(tài)技術(shù)的多語(yǔ)言網(wǎng)站研究與設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2010(3):128-130.
[3] 肖治國(guó).基于J2EE的內(nèi)容管理系統(tǒng)的研究與開(kāi)發(fā)[D]. 北京:中國(guó)航天第二研究院,2008.
[4] Liu Dongfei, Su Bi. Research in identification and purification of the bilingual web page[C]. International Colloquium on Computing, Communication, Control, and Management.USA:ISECS Press, 2008: 576-579.
[5] 陳偉.雙語(yǔ)平行網(wǎng)頁(yè)挖掘系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009(7):2678-269.