ASP.NET設計國際電子商務專案中的本地化支援

iDotNetSpace發表於2010-04-06
在之前的文章中,我已經討論過如何進行多語言的處理,但是最近發現,本地化支援中,多語言也只能算做其中一部分,還有其它一些同樣重要的內容需要考慮,比如日期格式和數字格式。其實這部分都是出現在表現層的,不影響資料庫裡的儲存,也不影響實際業務的操作,但是如果處理不當,卻會引起非常大的麻煩,比如日期格式,中國和印尼的樣式就是不一樣的,“月”和“日”所處的位置不一樣,如果只按中國的格式來發布,會在當地造成誤解,甚至誤操作;對於數字格式,更是需要注意,在中國,用“.”表示小數點兒,而“,”表示千分符,這個表示方法,在印尼正是反著的,所以這個有可能會造成更大的誤會,在電子商務中,大部分內容都是在和時間和金錢打交道,所以很有必要提前考慮這些事情。
    在本地化支援中的多語言部分,在本文不再討論,只來說明一下上述的顯示格式問題。在本地化支援中,有一個很重要的類就是Culture,通過對這個類的使用,可以控制上述日期及數字的格式。在頁面中,需要處理的控制元件有多種多樣,比如Label,GridView等,在格式處理方面,與多語言部分不同,不能把控制元件中的內容取出來後再做處理,因為反取出來的時候,已經全部變成了字串型,不能正常的還原為原來的格式,為此,需要在其它地方處理。
    上面說了半天,那麼如何知道要按哪種環境來處理呢?有些網站的做法是根據當前IE來判斷當前的環境,但是這種做法有時會帶來不方便,所以我的做法是把系統支援的語言全部列出來,供使用者選擇。
    在系統中,語言表儲存以下幾個主要欄位:
         LANG_CODE
    語言程式碼
         LANG_NAME
    語言名稱
         CULTURE
    該語言所對應的本地化資訊,比如:
    LANG_CODE=CN LANG_NAME=中國 CULTURE=zh-CN
     在使用的時候,先要修改的頁面就是登入頁面,在登入頁面上,需要增加一個語言列表的下拉框,這個下拉框中的內容來源於以上的語言表,當登入成功後,需要把該語言所對應的culture同時記錄在Session中,如下例:
    Session["CULTURE"] = culture值;
    當Session中有值後,其它頁面就可以直接引用這個值了。下面就來看一下如何使用這個值。在我得到正確的解決方案之前,我試驗了很多的方式來實現這個本地化功能,最後發現,原來走的很多都是彎路,只需要幾句簡單的處理就可以搞定一切,我們要做的就是在指定的頁面做一個過載,程式碼如下:
protected override void InitializeCulture()
{
string s = Request["CULTURE"];
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(s);
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(s);
base.InitializeCulture();
}
    經過上面的過載,該頁面上所有的輸出,都會自動轉換成指定的本地化格式了,甚至包括GridView,不用做任何處理,就可以了。
    總之一句話,有簡單的方式一定要用,不要繞不必要的彎路。
天道酬勤不酬怨
李鳴(aicken)原創 轉載註明

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-631419/,如需轉載,請註明出處,否則將追究法律責任。

相關文章