摘要:[ASP.NET] 使用資源檔開發多語系網站 (2)
要是對於使用資源檔開發多語系網站還不太了解的,可以先參考上一篇文章 ,
使用資源檔來開發多語系的網站,他會針對你的瀏覽器自動選取你適合的語言,
如果沒有適合的,他會選取預設的語言,一般來說應該是設定英文為預設語言,
但如果你想選取你要的語言時怎麼辦,?
比如說你在阿富汗用那邊的電腦上網時(應該有網路吧),想看中文時怎麼辦?
方法很多拉,上一篇是直接從瀏覽器去修改,但不是每個User都會改,
這時就可以在頁面上把語言列出來,給使用者選擇,我加上了語言的按鈕在頁面上,
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>多語系測試</title>
</head>
<body>
<form id="form1" runat="server">
<div style="margin-bottom:20px;">
<asp:Image ID="imgPeople" runat="server" /><br />
<asp:Label ID="LabContent" runat="server" ></asp:Label>
</div>
<div>
<asp:Button ID="btnCHT" runat="server" Text="繁體中文" />
<asp:Button ID="btnEN" runat="server" Text="English" />
</div>
</form>
</body>
</html>
<head runat="server">
<title>多語系測試</title>
</head>
<body>
<form id="form1" runat="server">
<div style="margin-bottom:20px;">
<asp:Image ID="imgPeople" runat="server" /><br />
<asp:Label ID="LabContent" runat="server" ></asp:Label>
</div>
<div>
<asp:Button ID="btnCHT" runat="server" Text="繁體中文" />
<asp:Button ID="btnEN" runat="server" Text="English" />
</div>
</form>
</body>
</html>
當然這程式的寫法很多,可以寫在Global.asax,也可以用其他方法寫,
我是使用Cookie來記錄目前的語系,然後告訴系統要使用哪一種資源檔,
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim LangCookie As HttpCookie = My.Request.Cookies("LanguageVer")
If LangCookie Is Nothing Then
My.Response.Cookies.Add(New HttpCookie("LanguageVer", Thread.CurrentThread.CurrentCulture.ToString))
End If
Dim cl As CultureInfo = New CultureInfo(My.Request.Cookies("LanguageVer").Value.ToString)
Thread.CurrentThread.CurrentCulture = cl
Thread.CurrentThread.CurrentUICulture = cl
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.LabContent.Text = Resources.Resource.Content1
Me.imgPeople.ImageUrl = Resources.Resource.imgPeople
Page.Title = Resources.Resource.Title
End Sub
Protected Sub btnCHT_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCHT.Click
GetLanguage("zh-TW")
End Sub
Protected Sub btnEN_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEN.Click
GetLanguage("en-US")
End Sub
Friend Sub GetLanguage(ByVal str As String)
My.Response.Cookies.Add(New HttpCookie("LanguageVer", str))
My.Response.Redirect(Request.Url.AbsoluteUri)
End Sub
Dim LangCookie As HttpCookie = My.Request.Cookies("LanguageVer")
If LangCookie Is Nothing Then
My.Response.Cookies.Add(New HttpCookie("LanguageVer", Thread.CurrentThread.CurrentCulture.ToString))
End If
Dim cl As CultureInfo = New CultureInfo(My.Request.Cookies("LanguageVer").Value.ToString)
Thread.CurrentThread.CurrentCulture = cl
Thread.CurrentThread.CurrentUICulture = cl
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.LabContent.Text = Resources.Resource.Content1
Me.imgPeople.ImageUrl = Resources.Resource.imgPeople
Page.Title = Resources.Resource.Title
End Sub
Protected Sub btnCHT_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCHT.Click
GetLanguage("zh-TW")
End Sub
Protected Sub btnEN_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEN.Click
GetLanguage("en-US")
End Sub
Friend Sub GetLanguage(ByVal str As String)
My.Response.Cookies.Add(New HttpCookie("LanguageVer", str))
My.Response.Redirect(Request.Url.AbsoluteUri)
End Sub
像 Me.LabContent.Text = Resources.Resource.Content1 ,就是告訴Label,去選擇Resource資源檔中的Content1欄位,
但主要是宣告cl為文化資訊型態,再把cl指定給系統的文化界面,
這樣就可以手動的改變語言,如下圖是按下English的按鈕,所產生的結果
如此簡單就可以達到,多語系的選擇,
但我覺得麻煩的是要把資料貼到資源檔裡面比較麻煩,但是只要設定好後之後就挺方便的
End...