在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
補充:
有趣的是,在Defual的Gloabal裡面並沒有Application_BeginRequest Event,但可以查到如下
而在MSDN上面對於些事情的解釋也很模糊(我是沒有看很懂,有些描述太簡單了)