程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 在ASP.Net 2.0中實現多語言界面的方法

在ASP.Net 2.0中實現多語言界面的方法

編輯:.NET實例教程

     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. 打開來看一看吧!
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved