WebForm系統的單語言公升級為多語言改造方案

2021-08-13 06:22:43 字數 2856 閱讀 8865

原來用webform開發的舊系統,因使用需要,由簡體中文改支援多語言,改完後,登入時可以切換語言版本,如下圖:

改造方案需要滿足:改造工作量小,改造速度快,擴充套件性好

方案一:編寫資源檔案

檔案內容以key-value方式,每個語言乙個檔案,無法兼顧後端儲存過程;

方案二:寫資料庫

表結構以key-語言

1,語言

2..語言

n的方式,擴充套件性好,前端和後端都能使用;

以上兩種方案都不能滿足以上三個要求;

雖然我的方案綜合了以上兩種方案,並創造性的增加了其他方法;

一、滿足非服務端元件的改造要求

在我的專案中,前端有用到jquery框架

(具體名稱就不說了

),這個框架有實現國際化,乙個語種乙個

js檔案,選擇不同語種時,用

js引入部分加入動態的

session

即可自動切換;

二、滿足服務端元件的快速翻譯

webform頁面中的各中有

gridview

、label

、radio

、select

、text

等服務端元件,需要翻譯的屬性有

text

和tooltip

;按常規的做法是把

text

和tooltip

的內容用乙個函式

()替換之,我的方案服務端元件全部自動翻譯,具體就是在

page_load

中呼叫controltrans函式,以下是函式實現:

/// /// 語言翻譯

///

///

public static void controltrans(control page)

if (item is imagebutton)

if (item is listcontrol)

//判斷是否包含子控制項,

if (item.hascontrols())

if (item is webcontrol)}}

/// /// 翻譯元件文字內容

///

///

private static void webcontroltrans(webcontrol obj)

obj.attributes.add(deftrans,"1");

if (obj.tooltip.trim() != "")

listinfos=obj.gettype().getproperties().where(a => a.name == "text" || a.name== "errormessage").tolist();

for (int i = 0; i < infos.count; i++)}}

/// /// gridview翻譯

///

///

private static void gridviewtrans(gridview grid)

grid.attributes[deftrans] = "1";

foreach (datacontrolfield item in grid.columns)}}

/// /// dropdownlist翻譯

///

///

private static void listtrans(listcontrol list)

list.attributes.add(deftrans,"1");

foreach (listitem item in list.items)}}

乙個aspx頁面加cs檔案的修改一般不會超過10分鐘改完,60個頁面,對自已狠一點一天就改完了,達到了快速的目地;

三、資料結構設計的優化

常規的方法是將key的內容為乙個或多個單詞,但我做了優化,我的

key就是簡體中文的內容,

系統在翻譯時,是以原來webform的中文做為關鍵值來搜尋需要翻譯的語言,這樣做可以省去建立

key值的時間,實現建立

key值自動化;只要開啟一下頁面,webform中要翻譯的內容全部寫入資料表。

注意亂碼問題,aspx建立時應為

utf8編碼,

字段型別應為

四、

合理利用靜態變數

,提公升效能

按常規的方法,每翻譯一次就查一次肯定效能上會有問題,特別是多人操作的系統;

我的方案是首次呼叫getlangstr函式時,系統會一次性載入全部翻譯記錄(用到了執行緒安全集合類

concurrentbag),後續的呼叫都從集合中查詢。這個類是乙個靜態變數,實現全域性性,避免被反覆初始化,提公升了翻譯的效能。 28

種語言的互譯,自然我們要利用好這個資源,自已寫了乙個批量翻譯的工具

(如下圖

),一鍵翻譯,後台資料表中的中文轉其他語言就搞定了;

通過以上方案的實踐,符合改造的三個要求,改造工作可以減少60%;

公升級系統引起的

公升級一次系統真是帶來了一大堆問題。訪問wamp下的本地網頁時出現下面的問題 遇到這個問題頭都打了,檢查自己的虛擬主機配置沒錯,mysql沒錯,php沒錯,從網上看了好多資料。最後終於解決了,在我的專案下的.htaccess檔案的問題 這個情況一般是為偽靜態規則寫的不規範造成的,檢查空間下是否有.h...

C語言單鏈表的應用 檔案管理系統

最近在學完 c與指標 後,再學習基本的資料結構時,記錄一下自己再借鑑前人專案的基礎上寫的一些小專案。希望能和c語音初學朋友一起分享一下。接下來會雙鏈表和迴圈鍊錶的應用,還有二叉樹的基本應用。製作乙個學生檔案管理系統,可以新增,插入,刪除,檢視,替換。include include include i...

跨版本公升級Linux系統的方法

使用 update manager 進行跨版本公升級。確保已經安裝 update manager。1.首先,修改源 sudo gedit etc apt sources.list 替換為以下內容 本文以公升級到ubuntu 13.04 為例。每乙個版本都有對應的標識 deb raring main ...