在ASP.Net 2.0中實(shí)現(xiàn)多語(yǔ)言界面的方法_.Net教程
推薦:ASP.NET中實(shí)現(xiàn)模板頁(yè)使用過(guò)JavaStruts程序員應(yīng)該知道,Struts中有一個(gè)模板標(biāo)記,雖然其使用起來(lái)比較復(fù)雜,但對(duì)于有大量頁(yè)面的程序來(lái)說(shuō)其帶來(lái)了很多方便。但是,在ASP.NET中并沒(méi)有現(xiàn)成實(shí)現(xiàn)可用,這方面國(guó)內(nèi)討論的也
1、跟以前一樣做界面,只是注意,把所有需要有多語(yǔ)言界面的文字都用label來(lái)做
2、做完以后,在Solution Explorer里選中這個(gè)文件,選Tools->Generate Local Resource
3、你會(huì)發(fā)現(xiàn)生成了一個(gè)目錄,App_LocalResources;這個(gè)目錄里多了一個(gè)resx的文件。比如你的aspx文件是default.aspx,它就會(huì)生成一個(gè)叫做default.aspx.resx的文件。
4、打開(kāi)這個(gè)文件看看,原來(lái)在label中的那些文字都跑到這里來(lái)了
5、打開(kāi)原來(lái)的aspx文件看看source,會(huì)發(fā)現(xiàn)源碼變了:
以下為引用的內(nèi)容: <%@ 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> |
6、注意這里:meta:resourcekey="PageResource1" 和meta:resourcekey="Localize1Resource1" 這就表示這里的文字是從資源中讀取的。
7、OK現(xiàn)在來(lái)做另一種語(yǔ)言的資源文件。很簡(jiǎn)單,copy Default.aspx.resx再paste一下,然后rename為Default.aspx.fr-fr.resx注意fr-fr是你要做的語(yǔ)言的名字。大家如果看dvdrip的話,應(yīng)該覺(jué)得這跟字幕文件很像吧?
8、有人說(shuō)我怎么知道那個(gè)語(yǔ)言叫什么名字呢?很簡(jiǎn)單,打開(kāi)ie,tools->internet options -> languages -> add,方框中間的就是了。
9、現(xiàn)在開(kāi)始編輯其他資源的文字。打開(kāi)Default.aspx.fr-fr.resx,對(duì)照著原來(lái)的內(nèi)容,把里面的內(nèi)容改成法語(yǔ)的。
10、到此為止,我們就完成了第一階段。ASP.Net會(huì)根據(jù)用戶的語(yǔ)言偏好來(lái)選擇顯示的語(yǔ)言。把IE里的設(shè)置改一下,在我們剛說(shuō)過(guò)的地方改成fr-fr,打開(kāi)這一頁(yè)看看?如果是法語(yǔ),恭喜你。如果不是,回頭重做……
11、OK,下一步,我們要允許用戶選擇自己的語(yǔ)言,而不是自動(dòng)。我們會(huì)用cookie存取用戶的選擇。在Application級(jí)別,我們讀取這個(gè)cookie并設(shè)置適當(dāng)?shù)腸ulture和uiculture。當(dāng)然,第一次進(jìn)來(lái)的時(shí)候,我們還是要讀取瀏覽器的設(shè)置,這個(gè)可以從Request.UserLanguages中獲得。
以下為引用的內(nèi)容: 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、然后我們要有一頁(yè)讓用戶選擇語(yǔ)言,比如我們用兩個(gè)button來(lái)做。在點(diǎn)擊這個(gè)button之后,我們要設(shè)置這個(gè)cookie為適當(dāng)?shù)恼Z(yǔ)言:
以下為引用的內(nèi)容: 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) ,這是為了重新讀取這一頁(yè),這樣這一頁(yè)也會(huì)顯示新選擇的語(yǔ)言。
13、最后我們要去掉ASP.Net的自動(dòng)選擇。從Default.aspx中去除:
Culture="auto" UICulture="auto"
14、打開(kāi)來(lái)看一看吧!
分享:優(yōu)秀ASP.NET程序員修煉之路“為人寫程序” 初級(jí)的程序員或經(jīng)驗(yàn)不足的程序員往往只意識(shí)到自己的程序是寫給計(jì)算機(jī)的,而不會(huì)在意程序其實(shí)也是寫給人的,或在意得不夠、不全面。 寫給機(jī)器的程序,往往追求的
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-在ASP.Net 2.0中實(shí)現(xiàn)多語(yǔ)言界面的方法。