2011-05-07 43 views
2

看來我的問題根據用戶偏好(.NET 4.0 Web應用程序)更改爲System.Globalization.CultureInfo.CurrentUICulture值。如何在.NET 4.0 Web應用程序中更改System.Globalization.CultureInfo.CurrentUICulture?

在我的web應用程序中,我有兩個按鈕。一個用於希臘語,一個用於英語。點擊按鈕後,請求會發送到服務器,要求更改用戶首選語言。對於希臘語,我發送「el-GR」和英語,我發送「en-US」。

在服務器端,我使用以下一段代碼來更改當前的CultureInfo

Dim languageChosen As String = Me.Context.Request.Params("langId") 

' Code for CultureInfo 
Dim cultureInfo As System.Globalization.CultureInfo 
cultureInfo = New System.Globalization.CultureInfo(languageChosen) 

' Code for Setting the CurrentCulture 
Thread.CurrentThread.CurrentCulture = cultureInfo 
Thread.CurrentThread.CurrentUICulture = cultureInfo 

Response.Redirect("Default.aspx", True) 

現在,在接下來的請求服務器,我從CultureInfo.CurrentUICulture.TwoLetterISOLanguageName獲取值檢查當前的文化,而這總是顯示「恩」,就算我的用戶已經拿起「EL-GR」。

問題在哪裏?

我是否必須在請求之間保存用戶首選語言,例如在會話中?然後在每個頁面的開頭將它設置爲System.Thread.CurrentThread.CurrentCulture

回答

3

我找到了解決問題的辦法。我不得不在會話中保存用戶偏好。 2)每次加載頁面時,我現在基於會話保存的用戶語言首選項構建了cultureInfo之後,設置Thread.CurrentThread.CurrentCulture。我這樣做的代碼點在InitializeCulture覆蓋中。換句話說,我的網頁覆蓋InitializeCulture如下:

Protected Overrides Sub InitializeCulture() 
    Dim l_languageChosen As String = Session("language") 

    ' Code for CultureInfo 
    Dim cultureInfo As System.Globalization.CultureInfo 
    cultureInfo = New System.Globalization.CultureInfo(l_languageChosen) 

    ' Code for Setting the CurrentCulture 
    Thread.CurrentThread.CurrentCulture = cultureInfo 
    Thread.CurrentThread.CurrentUICulture = cultureInfo 

    MyBase.InitializeCulture() 

End Sub 

3)爲了避免我的所有頁面覆蓋此方法,避免代碼重複,我創建了一個超類「MyWebPage」它執行覆蓋(並從System.Web.UI.Page繼承),然後我使所有的頁面都從MyWebPage繼承。 4)當然,在設置了Thread.CurrentThread.CurrentCulture和CurrentUICulture之後,響應用戶更改語言請求的服務器代碼也相應地發生了變化,以保存會話中的語言首選項。5)我還將globalization標記設置在我的web.config如下:

<globalization 
    uiCulture="auto" 
    culture="auto" 
    enableClientBasedCulture="true" /> 

這讓我檢測用戶在他/她的瀏覽器中設置語言首選項,這樣我可以初步確定了首選語言。

6)在我global.asax我省從瀏覽器檢測到的語言首選項如下:

Session.Add("language", System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName) 

現在一切正常。

相關問題