上方廣告

Lady Kukki 手作糖霜餅乾

2011年6月2日 星期四

ASP.NET 自訂多語系(不使用IE瀏覽器設定的語系)

一般來講如果使用ASP.NET來架構網站,只需要程式對應的目錄底下的App_LocalResources資料夾內加上一支與AP相同的資源檔就可以實作多國語系了(這裡不解釋如何做,不會的請自己在網路上Google一下應該很多答案)。

但是這樣出來的結果就是,Client端的瀏覽器是哪一國的語系那們NET本身的機制就會使用哪一國的語系。如果客戶有個需求就是每個使用這可已切換到自己的語系的話那這個方式似乎就失效了,好在ASP.NET本身提供了另外一個機制讓我們可以直接在Global.asax(註1)裡面直接撰寫一
些語法來改變使用者所看到的語系,詳見以下語法。



protected void Application_BeginRequest(Object sender, EventArgs e)
{
    string langauge = "0";
   
    //這裡請依照自己的需求改變使用者所需要的語系
    //langauge="2";
    
    if (string.Compare(langauge, "0", true) == 0)
    {
        CultureInfo currentInfo = new CultureInfo("en-US");
        Thread.CurrentThread.CurrentCulture = currentInfo;
        Thread.CurrentThread.CurrentUICulture = currentInfo;
    }
    else if (string.Compare(langauge, "2", true) == 0)
    {
        CultureInfo currentInfo = new CultureInfo("zh-TW");
        Thread.CurrentThread.CurrentCulture = currentInfo;
        Thread.CurrentThread.CurrentUICulture = currentInfo;
    }
    else if (string.Compare(langauge, "1", true) == 0)
    {
        CultureInfo currentInfo = new CultureInfo("zh-CN");
        Thread.CurrentThread.CurrentCulture = currentInfo;
        Thread.CurrentThread.CurrentUICulture = currentInfo;
    }
}


註1:
Global.asax 檔案也稱為 ASP.NET 應用程式檔案,是選擇性檔案,包含回應 ASP.NET 或 HttpModules 所引發的應用程式層級事件的程式碼。Global.asax 檔案位於 ASP.NET 架構應用程式的根目錄。Run Time 時,Global.asax 被剖析並編譯成動態產生的 .NET Framework 類別,這類別是衍生自 HttpApplication 基底類別 (Base Class) 的。Global.asax 檔案本身設定為自動拒絕任何直接的 URL 要求;外部使用者無法下載或檢視其中編寫的程式碼。

ASP.NET Global.asax 檔案可以和 ASP Global.asa 檔案共同存在。您可以在 WYSIWYG 設計工具或在 Notepad 中建立 Global.asax 檔案,或者像組件 (Assembly) 一樣當作您部署於應用程式 \Bin 目錄中的已編譯類別來建立。然而,後者的情形中,您仍然需要一個參考至組件的 Global.asax 檔案。

Global.asax 檔案是選擇性的 (Optional)。如果您不定義檔案,ASP.NET 網頁架構假設您沒有定義任何應用程式或工作階段 (Session) 事件處理常式。

當您將變更儲存至作用中 Global.asax 檔案時,ASP.NET 網頁架構會偵測檔案是否已變更。它會完成應用程式的所有目前要求、將 Application_OnEnd 事件傳送至任何接聽項 (Listener),並重新啟動應用程式定義域。實際上,這會重新啟動應用程式、關閉所有瀏覽器工作階段,並清除所有的狀態資訊。當下一個從瀏覽器輸入的要求抵達時,ASP.NET 網頁架構會重新剖析和重新編譯 Global.asax 檔案,並引發 Application_OnStart 事件。