入鄉隨俗:ASP.NET的本地化(Localization)簡介


在實際的開發過程中,經常遇到這種情況:同一個網站,在不同的國家需要顯示不同的語言。在美國顯示英語,在中國顯示中文。下面就用幾個簡單的例子來說明ASP.NET提供的本地化支持。

          楔子:

ASP.NET中的資源文件有兩種:一種是全局資源文件,放在App_GlobalResources目錄下,可以被站點中的任意頁面或者站點訪問;一種是局部資源文件,放在App_LocalResources目錄下,只能被一個特定的頁面訪問。 在下面的例子中會看到這兩種資源文件。

 

1. 對服務器控件應用本地化。

場景:

 頁面上有一個按鈕,在美國讓它顯示"Read Me",在中國讓它顯示"讀我"

實施:

1.1. 拖一個按鈕到頁面上,設置它的Text屬性。

        

    1.2. 選中按鈕,在菜單上選擇"Tools"->"Generate Local Resource".

    (由於我用的是英文系統,如果你用的是中文系統,也在相應位置找到中文菜單)

      點擊后,發現App_LocalResources文件夾和Default.aspx.resx被創建了。

 

  這里創建的Default.aspx.resx就是一個局部資源文件,只能在Default.aspx的代碼中訪問,其他地方訪問不到。

  

  打開Default.aspx.resx,可以看到里面已經自動創建了與我們這個按鈕相關的一些鍵值對。

 

  將Default.aspx切換到代碼模式,發現與Resource相關的屬性已經被自動加上了。

  

  1.3. 現在將Default.aspx.resx復制一份,重命名為Default.aspx.zh-CN.resx.

      

  1.4. 打開Default.aspx.zh-CN.resx, 將里面Button1Resource1.Text的值改成中文。

       

         運行結果:

在IE中瀏覽該頁面,由於我用的是英文系統,所以默認顯示是Read Me.

現在我來更改IE的語言,在IE菜單中,Tools->Internet Options->Languages, 將中文移動到第一位。

再次瀏覽這個網頁,發現按鈕的文字已經變成中文的了。

 

2. 本地化HTML內容。

場景:

在上面的例子中我們已經看到了如何對服務器控件進行本地化,那么如果有一段靜態的HTML內容,該如何對它進行本地化那?

比如,下面的一段HTML代碼,我點擊Tools->Generate Local Resource,沒有任何反應。

  

實施:

2.1. 將這段靜態HTML代碼用asp: Localize控件包起來,注意asp: Localize控件要有唯一的ID和runat="Server"屬性。

  

2.2. 現在在設計視圖中選擇該asp:Localize控件,然后點擊菜單中的Tools->Generate Local Resource. 就會發現代碼視圖中的標簽被改變了。

  

2.3 雙擊打開Default.aspx.resx, 發現對應的鍵值對已經對添加了。

  

2.4. 當然,對於Default.aspx.zh-CN.resx,我們需要手動添加一個同樣的鍵值對。

  

運行結果:

以下分別是IE語言設置為英文和中文時的執行結果:

    

  

 

3. 格式化Site Map.

場景:

網站有一個站點導航,用Site Map實現的,現在想要讓它也實現本地化。

以下是代碼結構:

 

   

   

實施:

3.1. 為Site Map創建兩個Resource文件。

         

          由於Site Map是全局使用的,它對應的資源文件也是全局有效的,所以這兩個資源文件一定要放在App_GlobalResources文件夾下,而不是App_LocalResources,否則程序會報錯的。

3.2. 在兩個資源文件中分別添加英文和中文的鍵值對。

    

   

3.3. 為Web.sitemap添加本地化相關的屬性。

   

 

 具體屬性有:

 3.3.1. 為siteMap根節點添加enableLocalization="true"

 3.3.2. 對於需要本地化輸出的字符串,用$resources:ClassName,KeyName,DefaultValue的形式指向資源文件。我們的例子中沒有指定默認值,如果想指定默認值,加個逗號,后面寫值就可以。

         運行結果:

         以下分別是英文和中文下的顯示結果:

        

        

 

        4. 獲取資源文件鍵值對的幾種方式;

        提問:

       我創建了資源文件,在里面定義了一些鍵值對,有哪幾種方式可以獲取到資源文件里面的鍵值對那?

         

      回答:

      有如下的幾種方式:

      4.1. 讀取全局資源

        4.1.1.

              

        4.1.2. 

              

       4.1.3.

             

    4.2 讀取局部資源。

       4.2.1.

              

      4.2.2.

             

      4.2.3.

            

 

      5. 動態更改當前語言。

    場景:

    在上面的幾個例子中,當我們測試頁面的時候,都是手動更改IE的設置來選擇語言。那么通過程序怎么來做這件事情那?

    實施:

    下面通過一個例子來演示。

    5.1. 首先創建一個ListBox和一個Button,用來向服務器端傳遞用戶選擇的語言。

      

    5.2. 在服務器端重寫InitializeCulture方法,獲取用戶選擇,並且設置當前顯示語言。

      

    運行結果:

    選擇中文時:

      

    選擇英文時:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM