2010年11月11日 星期四

ASP.NET 4.0 Multi Language Design : 即時切換網頁語系的多國語言設計(2)

假設網站中所要執行多國語言的網頁,有套用「主版頁面」的話,打開網站中的Default.aspx,將設計視窗中的文字敘述[歡迎使用 ASP.NET!],改為使用Label控制項取代,並將原本的文字敘述刪除。

<asp:Label ID="LabelMessage" runat="server"  Text="<%$ Resources:MessageResource, Welcome %>" />

clip_image002

接著在網站中預設的Default.aspx中來設計可以讓使用者自行挑選的多國語言網頁設計,其設計步驟如下:

Step 1: 在Default.aspx中加入DropDownList控制項:

<asp:DropDownList ID="ddlLanguage" runat="server" AutoPostBack="True" ClientIDMode="Static">

<asp:ListItem Value="zh-TW">中文</asp:ListItem>

<asp:ListItem Value="en-US">英文</asp:ListItem>

<asp:ListItem Value="ja-JP">日文</asp:ListItem>

</asp:DropDownList>

Step 2: 開啟Default.aspx.vb,改寫InitializeCulture方法,將DropDownList控制項所挑選的值,設定給Page物件的UICulture屬性。

Step 3: 但是因為DropDownList控制項是位在主版頁面的網頁中,因此其所產生之HTML控制項的名稱將會有所異動,那麼就必須要修改Request.Form所要接收的控制項名稱。程式碼如下:

Partial Class _Default

Inherits System.Web.UI.Page

  Protected Overrides Sub InitializeCulture()

    If Request.Form("ctl00$MainContent$ddlLanguage") IsNot Nothing Then

    Dim selectedLanguage As String = _

    Request.Form("ctl00$MainContent$ddlLanguage")

    Page.UICulture = selectedLanguage

  End If

End Sub

End Class

Step 4: 瀏覽Default.aspx,並挑選不同的語系,檢視網頁的執行結果。

clip_image004

Step 5: 當挑選為英文時:

clip_image006

Step 6: 當挑選為日文時:

clip_image008

Step 7: 最後,若是ddlLanguage 這個DropDownList控制項是放置在主版頁面Site.master中的話,那麼在主版頁面中改寫InitializeCulture 方法,其Request.Form所接收的參數值,就可以直接使用ddlLanguage這個ID了。

<script runat="server">

Protected Overrides Sub InitializeCulture()

If Request.Form("ddlLanguage") IsNot Nothing Then

    Page.UICulture = Request.Form("ddlLanguage")

End If

End Sub

</script>

1 則留言:

玄關 提到...

您好,想請問一下,我主板頁面中如果程式碼出現InitializeCulture就會出現錯誤,會叫我把Overrides刪掉,之後發現是因為Inherits不是Page而是MasterPage