Asp.net - 多國語系-使用Resource (三)

在Global.asax中利用cookies設定語系。
(Using cookies to set page language on file "Global.asax"

看來要自己回答自己了,之前在文章 "Asp.net - 多國語系-使用Resource (二)",最後有個疑問是

我在Application_Start的地方怎麼會無法利用cookies將語系做設定呢 ? 後來終於找到答案了,

 

Application_Start的定義如下

ASP.NET calls them once for the lifetime of the application domain

也就是說只有當應用程式第一次啟動的時候才會呼叫(可在IIS上面停止應用程式再開啟測試得知)

 

Application_BeginRequest的定義如下

The Application_BeginRequest method is executed on all requests handled by the ASP.NET runtime.

 
因此將init相關的設定移至此

Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
        Dim cLang As HttpCookie = HttpContext.Current.Request.Cookies("MyLanguage")
        
        If cLang IsNot Nothing Then
            System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(cLang.Value)
            System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(cLang.Value)
        End If
End Sub

 

 

到此才達到我心中的要求,又可以有以下好處

  • 當使用者沒有選擇要使用何種語言時,則自動判定使用何種語系(瀏覽器語系)。
  • 當cookies有值時,則代表使用User自訂義語言。
  • 將整個語系套用至整個網站。

 

參考文章

Application_BeginRequest Definition

Global Structure

 

 

 

補充:

有趣的是,在Defual的Gloabal裡面並沒有Application_BeginRequest Event,但可以查到如下

而在MSDN上面對於些事情的解釋也很模糊(我是沒有看很懂,有些描述太簡單了)