日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

[转].Net实现本地化简易教程

發(fā)布時(shí)間:2025/3/19 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转].Net实现本地化简易教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)自:https://www.cnblogs.com/csdbfans/archive/2011/10/17/2214048.html

?

實(shí)現(xiàn)多語(yǔ)言版本的支持,就是所謂的國(guó)際化,也說(shuō)是本地化。

今天這里將要介紹的是.Net里面實(shí)現(xiàn)本地化的介紹。網(wǎng)上有很多文章介紹怎么實(shí)現(xiàn)本地化,但是大多不適合初學(xué)者去學(xué)習(xí),因?yàn)槌鯇W(xué)者需要更為詳細(xì)的介紹以及圖表作為說(shuō)明。

所以本著互相學(xué)習(xí)的想法,我也寫(xiě)一下自己最近學(xué)習(xí)的心得體會(huì)。

首先,這里面需要介紹一些知識(shí)。當(dāng)然,你可以從文中選擇哪些是你需要的內(nèi)容來(lái)進(jìn)行閱讀。

這里面我們要說(shuō)明的是全局資源文件,全局資源文件是存放在App_GlobalResources的文件夾里面。在Web Form里面創(chuàng)建這個(gè)文件夾很簡(jiǎn)單,在“解決方案的資源管理器”中右鍵項(xiàng)目(WebSite或者是Application),選擇Add->Add ASP.NET Folder->App_GlobalResources(如下圖所示)。應(yīng)用程序中只能有一個(gè)這樣的文件夾,且處于應(yīng)用程序根目錄下,當(dāng)然里面的資源文件就不是惟一的。

?

?

還有另一種是局部資源文件,它跟全局資源文件類(lèi)似,不一樣的就是存放的文件夾名字不一樣,局部資源文件夾是App_LocalResources。在應(yīng)用程序里面,這樣的文件夾數(shù)量沒(méi)有作限制,而且也不限定它的位置。

第一點(diǎn):實(shí)現(xiàn)Asp.net服務(wù)端控件本地化。

實(shí)現(xiàn)Asp.net服務(wù)端控件的本地化,非常簡(jiǎn)單。一旦想給服務(wù)端的控件添加本地化信息,那么你就可以按如下的步聚來(lái)實(shí)現(xiàn)你的本地化操作。進(jìn)入到設(shè)計(jì)視窗,然后鼠標(biāo)點(diǎn)擊其中的一個(gè)服務(wù)端控件,然后選中菜單上的"Tools->Generate Local Resource”(如下圖)。然后VS2010就會(huì)為你創(chuàng)建此頁(yè)面的資源文件。然后在應(yīng)用程序里面,你會(huì)發(fā)現(xiàn)多了一個(gè)文件夾App_LocalResources,并且里面多了一個(gè)以剛才編輯頁(yè)面命名的資源文件。被編輯的頁(yè)面是Login.aspx頁(yè)面,這時(shí),你會(huì)在Login.aspx里面看到VS2010生成了一個(gè)新的目錄App_LocalResources,并且里面多了一個(gè)文件Login.aspx.resx。注意,這里的本地化文件的命名是固定的,不能被改變,一個(gè)本地化文件對(duì)應(yīng)一個(gè)頁(yè)面文件。

?

雙擊資源文件Login.aspx.resx,并給其中的Value框輸入你需要的Value值。資源文件里面的Name值是Login.aspx服務(wù)端控件里面的屬性。這里需要講一下,資源文件并不只限于文本格式,其實(shí)還包括很多種格式的資源文件。下圖中在Login.aspx.resx底下有“Strings”下拉框(向下的三角形),點(diǎn)擊即可選擇需要添加的資源文件,并點(diǎn)擊“Add Resource”下拉框選擇添加。

添加完資源文件的話(huà),服務(wù)端控件的本地化就實(shí)現(xiàn)完了,這時(shí)候你Ctrl+F5運(yùn)行后,可以看到你登錄頁(yè)(Login.aspx)的內(nèi)容就是你填寫(xiě)的資源文件的內(nèi)容。這里面資源文件的內(nèi)容(上圖剛寫(xiě)Name對(duì)應(yīng)的Value值)我就不貼Login.aspx.resx圖了,我貼個(gè)結(jié)果吧。Login.aspx.resx是工具自動(dòng)生成的文件,所以你不需要的列,你可以對(duì)其進(jìn)行刪除或者是修改操作。

其實(shí)這里還有一個(gè)圖需要說(shuō)明的,不知道你有沒(méi)有看到每個(gè)服務(wù)端控件的代碼里面,多了一個(gè)屬性。類(lèi)似meta:resourcekey="RegisterHyperLinkResource1"。

這里面需要說(shuō)明的是,它只對(duì)服務(wù)端控件起作用,不是服務(wù)端控件的文本,如果也想用資源文件的方式來(lái)做的話(huà)。下文會(huì)使用另一個(gè)控件來(lái)做(<asp:Localize>)。回過(guò)頭來(lái)說(shuō),我們是實(shí)現(xiàn)對(duì)多語(yǔ)言的支持,那么資源文件當(dāng)然是需要多個(gè)的,比如再創(chuàng)建一個(gè)叫Login.aspx.en.resx的資源文件在App_LocalResources里面。

改變?yōu)g覽器閱讀網(wǎng)站首選項(xiàng)的語(yǔ)言,再刷新瀏覽器里面Login.aspx頁(yè)面,你就會(huì)發(fā)現(xiàn)里面使用的語(yǔ)言變成是英語(yǔ),而不是剛才的中文。改變?yōu)g覽器閱讀網(wǎng)站語(yǔ)言的設(shè)置如下:以IE做說(shuō)明,IE菜單:工具->Internet選項(xiàng)->語(yǔ)言->添加->選擇英語(yǔ)。這里之后需要注意的是:英文需要排在第一位,不然不會(huì)起作用

?

上面介紹了怎么實(shí)現(xiàn)Asp.Net里面服務(wù)端控件的本地化,那普通的文本呢?其實(shí)普通的文本也可以支持到。但是感覺(jué)普通的文件其實(shí)跟用個(gè)Label的方式來(lái)做有什么不同了?

也許就是Label會(huì)自動(dòng)生成更多的Name名(在資源文件里面),省去我們刪除的工作吧。所以人家微軟給你另一種支持了,如果你覺(jué)得可以用,那就用吧。拿上文登錄頁(yè)Login.aspx頁(yè)面的代碼來(lái)說(shuō)吧:

<p>Please enter your username and password. <asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="False"meta:resourcekey="RegisterHyperLinkResource1"> Register</asp:HyperLink> if you don't have an account.</p>

這里面我們可以用<asp:Localize>服務(wù)端控件,這個(gè)控件位于工具箱里的標(biāo)準(zhǔn)類(lèi)別里面。加入了Localize后代碼如下所示:

<p><asp:Localize ID="Header" runat="server"> Please enter your username and password.</asp:Localize> <asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="False"meta:resourcekey="RegisterHyperLinkResource1">Register</asp:HyperLink> <asp:Localize ID="Footer" runat="server"> if you don't have an account.</asp:Localize></p>

其實(shí)到了這一步之后,又需要用到我們?cè)谏厦嫣岬降囊粋€(gè)屬性meta:resourcekey="HeaderResource1”,然后在資源文件里面寫(xiě)需要顯示的內(nèi)容。
這里面如果你不知道資源文件里面的Name值是什么的話(huà),其實(shí)也可以跟開(kāi)始那樣,在設(shè)計(jì)視窗里面點(diǎn)擊里面的服務(wù)端控件,然后“Tools->Generate Local Resource”。這后之后它就會(huì)變成如下的代碼:

<p> <asp:Localize ID="Head" runat="server" meta:resourcekey="HeadResource1"Text="Please enter your username and password."></asp:Localize><asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="False"meta:resourcekey="RegisterHyperLinkResource1"Text="Register"></asp:HyperLink> <asp:Localize ID="Footer" runat="server" meta:resourcekey="FooterResource1" Text=" if you don't have an account."></asp:Localize></p>

然后在資源文件里面,你也能看到相應(yīng)的變化,不過(guò)它只改變默認(rèn)的一個(gè)資源文件,其它不同語(yǔ)言的資源文件它并不會(huì)同步改變。?
下圖我還有一個(gè)地方想說(shuō)明一下,那就是底下的Access Modifier下拉框,里面三種訪(fǎng)問(wèn)修辭符。Public是公共訪(fǎng)問(wèn)的,Internal是程序里面訪(fǎng)問(wèn)的,No code generation應(yīng)該就是這種不需要使用代碼來(lái)訪(fǎng)問(wèn)的。

?

上面提到的都還只是局部資源文件里面的內(nèi)容,下面我們要介紹下全局資源文件夾里面的資源文件是怎么使用的。這里介紹的是用代碼的方式來(lái)實(shí)現(xiàn)本地化。說(shuō)到全局資源文件,那就是放App_GlobalResources文件里面的資源文件。添加此文件夾的方法,我想大家都知道了,本文開(kāi)始的部分就有 介紹了,跟局部資源文件夾的方法一樣。接著我們就來(lái)新建我們的全局資源文件GlobalResource.resx。

這里面有必要看一下GlobalResource.resx的后置文件----GlobalResource.Designer.cs。

在全局資源文件里面加了Name為Test,Value為測(cè)試的內(nèi)容保存之后,你會(huì)發(fā)現(xiàn)在它的后置代碼(GlobalResource.Designer.cs)文件里面增加了如下的內(nèi)容:

internal static string Test {get {return ResourceManager.GetString("Test", resourceCulture);}}

這個(gè)代碼應(yīng)該不難懂吧,它就是用Test屬性來(lái)取文本值。這里需要注意的是它是internal的訪(fǎng)問(wèn)修辭符,和一個(gè)靜態(tài)屬性。所以你在代碼里面加入了這個(gè)類(lèi)的命明空間之后,就可以通過(guò)類(lèi)的屬性方式來(lái)獲取資源文件里面文本的內(nèi)容,當(dāng)然其它資源類(lèi)型也是一樣的獲取方式,只不是屬性的返回類(lèi)型不一樣而已。

(1)在cs代碼里面直接獲取:string content = Resources.GlobalResource.Test (2)Resource表達(dá)式: <asp:Localize ID="Head" runat="server"? Text="<%$ Resources:GlobalResource, Test %>"></asp:Localize> 這里面Resources是命明空間GlobalResource是類(lèi)名Test是類(lèi)里面的屬性,通過(guò)它們來(lái)取到資源文件的值。 (3)使用GetGlobalResourceObject方法: string content = GetGlobalResourceObject("GlobalResource", "Test").ToString(); 這里GetGlobalResourceObject方法返回的是一個(gè)Object。 對(duì)比一下,局部的作法: (1)Resource表達(dá)式:<asp:Localize ID="Head" runat="server"
Text=" <%$ Resources:LoginButtonResource1.Text %> "></asp:Localize> 這是局部資源文件的綁定方法,在局部資源文件里面,沒(méi)有對(duì)應(yīng)的后置文件,就是沒(méi)有.cs文件,直接用固定的方式來(lái)取值。Resources是 默認(rèn)的命明空間名,這里不像全局可以改變(至少我是沒(méi)有發(fā)現(xiàn)),冒號(hào)后面的就是局部資源文件里面的Name值。 (2)meta:resourceKey,就是服務(wù)端控件本地化的實(shí)現(xiàn)。 (3)GetLocalResourceObject方法,跟GetGlobalResourceObject類(lèi)似。 最后,作為收尾的介紹。我們來(lái)講講實(shí)現(xiàn)動(dòng)態(tài)本地化的方式。 這里面我們還是以登錄頁(yè)(Login.aspx)為例來(lái)作說(shuō)明,在頁(yè)面中增加語(yǔ)言的選擇下拉框,讓用戶(hù)可以選擇想要的語(yǔ)言來(lái)實(shí)現(xiàn)本地化。 Login.aspx.cs代碼如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Threading; using System.Globalization;namespace ResourceWebForm.Account {public partial class Login : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e) {} //枚舉語(yǔ)言類(lèi)型 enum Language{English,Chinese}protected override void InitializeCulture() {//獲取select下拉框里面的值string language = Request.Form["ddlLanguageName"];string languageId = ""; if (!string.IsNullOrEmpty(language)) {try {//把字符串轉(zhuǎn)為枚舉類(lèi)型Language enumLanguage=(Language)System.Enum.Parse(typeo(Language),language);switch(enumLanguage) {case Language.Chinese:languageId = "zh-CN";break;default:languageId = "en-US";break;}}catch(Exception ex){languageId = "en-US";}Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(languageId);Thread.CurrentThread.CurrentUICulture = new CultureInfo(languageId);}base.InitializeCulture();}} }

在Login.aspx頁(yè)面里面相比之前的內(nèi)容只是加了一個(gè)下拉框跟一個(gè)按鈕來(lái)提交語(yǔ)言的改變(在下圖底下的代碼)。這里通過(guò)重寫(xiě)父類(lèi)的方法InitializeCulture()來(lái)達(dá)到本地化的效果。此方法用來(lái)初始化頁(yè)面的Culture和UICulture的信息。在 ASP.NET Web網(wǎng)頁(yè)當(dāng)中,您可以設(shè)定這兩個(gè)文化特征值,即?Culture?和UICulture?屬性。Culture?值判定與文化特性相關(guān)功能的結(jié)果 (例如,日期、數(shù)字和貨幣格式等)。
UICulture?值判定為網(wǎng)頁(yè)載入的資源。如果想了解更多,可以參照此鏈接Page.InitializeCulture方法。關(guān)于上面代碼的languageId,你如果不知道還有語(yǔ)言的簡(jiǎn)寫(xiě)的話(huà),可以用上面的方法,在瀏覽器里面:IE菜單:工具->Internet選項(xiàng)->語(yǔ)言->添加,這樣你就知道每種語(yǔ)言的簡(jiǎn)寫(xiě)是什么了。

<p><select id="ddlLanguage" name="ddlLanguageName"><option value="English" selected="selected">English</option><option value="Chinese">Chinese</option></select> <asp:Button ID="ChangeBtn" runat="server" Text="Change Language" /></p>

這里面主要改變的是App_LocalResources局部資源文件夾里面的文件內(nèi)容(Login.aspx.resx和Login.aspx.zh.resx),全局資源文件的作法也類(lèi)似局部資源文件的作法

結(jié)尾:本文到此就基本簡(jiǎn)單地介紹了Resource資源文件的使用,如果你們覺(jué)得有什么問(wèn)題的話(huà),歡迎指出,畢竟我也是剛開(kāi)始學(xué)習(xí)沒(méi)多久,
在你們的教導(dǎo)下,我相信自己能學(xué)得更好。至少思維的碰撞能讓我們理解得更加透徹吧。如果你覺(jué)得本文還揍合過(guò)去,想轉(zhuǎn)載的話(huà),請(qǐng)務(wù)必加上此標(biāo)注。
最后祝大家學(xué)得快樂(lè):)

總結(jié)

以上是生活随笔為你收集整理的[转].Net实现本地化简易教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。