[ASP.NET] 使用資源檔開發多語系網站 (2)

摘要:[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>

 當然這程式的寫法很多,可以寫在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

像 Me.LabContent.Text = Resources.Resource.Content1 ,就是告訴Label,去選擇Resource資源檔中的Content1欄位,

但主要是宣告cl為文化資訊型態,再把cl指定給系統的文化界面,

這樣就可以手動的改變語言,如下圖是按下English的按鈕,所產生的結果

如此簡單就可以達到,多語系的選擇,

但我覺得麻煩的是要把資料貼到資源檔裡面比較麻煩,但是只要設定好後之後就挺方便的

End...