原來用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 ...