轉自:http://dev.yesky.com/msdn/182/2412682.shtml
1.跟以前一樣做介面,只是注意,把所有需要有多語言介面的文字都用label來做
2. 做完以後,在Solution Explorer裡選中這個檔案,選Tools->Generate Local Resource
3. 你會發現產生了一個目錄,App_LocalResources;這個目錄裡多了一個resx的檔案。比如你的aspx檔案是default.aspx,它就會產生一個叫做default.aspx.resx的檔案。
4. 開啟這個檔案看看,原來在label中的那些文字都跑到這裡來了
5. 開啟原來的aspx檔案看看source,會發現源碼變了:
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default2" title="Untitled Page" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %> ………… <asp:Localize ID="Localize1" runat="server" meta:resourcekey="Localize1Resource1"></asp:Localize> ********************************************************************* |
如果是其他的控制項上的文字,基本上也是會自動產生的。比如button和gridview的:
<asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" Text="Button1" /><br /> <asp:GridView ID="GridView1" runat="server" meta:resourcekey="GridView1Resource1"> <Columns> <asp:BoundField HeaderText="Header1" meta:resourcekey="BoundFieldResource1" /> <asp:BoundField HeaderText="Header2" meta:resourcekey="BoundFieldResource2" /> </Columns> </asp:GridView> |
產生的resource如下:
*********************************************************************
6. 注意這裡:meta:resourcekey="PageResource1" 和meta:resourcekey="Localize1Resource1" 這就表示這裡的文字是從資源中讀取的。
7. OK現在來做另一種語言的資源檔。很簡單,copy Default.aspx.resx再paste一下,然後rename為Default.aspx.fr-fr.resx注意fr-fr是你要做的語言的名字。大家如果看dvdrip的話,應該覺得這跟字幕檔案很像吧?
8. 有人說我怎麼知道那個語言叫什麼名字呢?很簡單,開啟ie,tools->internet options -> languages -> add,方框中間的就是了。
9. 現在開始編輯其他資源的文字。開啟Default.aspx.fr-fr.resx,對照著原來的內容,把裡面的內容改成法語的。
10. 到此為止,我們就完成了第一階段。ASP.Net會根據使用者的語言偏好來選擇顯示的語言。把IE裡的設定改一下,在我們剛說過的地方改成fr-fr,開啟這一頁看看?如果是法語,恭喜你。如果不是,回頭重做……
11.下一步,我們要允許使用者選擇自己的語言,而不是自動。我們會用cookie存取使用者的選擇。在Application層級,我們讀取這個cookie並設定適當的culture和uiculture。當然,第一次進來的時候,我們還是要讀取瀏覽器的設定,這個可以從Request.UserLanguages中獲得。
Private SupportedLanguages As String() = {"en-us", "fr-fr"} Public Const LANGUAGE_COOKIE_NAME As String = "UserLanguage" Sub Application_AcquireRequestState(ByVal sender As Object, ByVal e As EventArgs) Dim languageCookie As HttpCookie = Request.Cookies(LANGUAGE_COOKIE_NAME) Dim language As String = String.Empty If (languageCookie Is Nothing) Then Dim userLanguages As String() = Request.UserLanguages Dim index As Integer For i As Integer = 0 To userLanguages.Length - 1 index = Array.IndexOf(SupportedLanguages, userLanguages(i)) If index >= 0 Then language = SupportedLanguages(index) Exit For End If Next If language = String.Empty Then _ language = SupportedLanguages(0) Response.Cookies.Add(New HttpCookie(LANGUAGE_COOKIE_NAME, language)) Else language = languageCookie.Value End If Dim culture As CultureInfo = New CultureInfo(language) System.Threading.Thread.CurrentThread.CurrentUICulture = culture End Sub |
12. 然後我們要有一頁讓使用者選擇語言,比如我們用兩個button來做。在點擊這個button之後,我們要設定這個cookie為適當的語言:
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click SetLanguage("fr-fr") End Sub Protected Sub SetLanguage(ByVal language As String) Response.Cookies(Global.ASP.global_asax.LANGUAGE_COOKIE_NAME).Value = language Dim culture As CultureInfo = New CultureInfo(language) System.Threading.Thread.CurrentThread.CurrentUICulture = culture Server.Transfer(Request.Path) End Sub |
注意最後的Server.Transfer(Request.Path) ,這是為了重新讀取這一頁,這樣這一頁也會顯示新選擇的語言。
13. 最後我們要去掉ASP.Net的自動選擇。從Default.aspx中去除:
Culture="auto" UICulture="auto"
14. 開啟來看一看吧!