在實際的開發過程中,經常遇到這種情況:同一個網站,在不同的國家需要顯示不同的語言。在美國顯示英語,在中國顯示中文。下面就用幾個簡單的例子來說明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方法,擷取使用者選擇,並且設定當前顯示語言。
運行結果:
選擇中文時:
選擇英文時:
作者:今夜太冷
出處:http://www.cnblogs.com/time-is-life/archive/2012/07/18/2597751.html
在實際的開發過程中,經常遇到這種情況:同一個網站,在不同的國家需要顯示不同的語言。在美國顯示英語,在中國顯示中文。下面就用幾個簡單的例子來說明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方法,擷取使用者選擇,並且設定當前顯示語言。
運行結果:
選擇中文時:
選擇英文時:
作者:今夜太冷
出處:http://www.cnblogs.com/time-is-life/archive/2012/07/18/2597751.html