基于ASP.NET實(shí)現(xiàn)全球化
2006/11/13 9:27:13
因?yàn)轫?xiàng)目的關(guān)系,這兩天一直在研究ASP.NET的全球化問(wèn)題。我知道,在JAVA體系中有專(zhuān)門(mén)的I18N處理方案,.NET中不可能會(huì)沒(méi)有。所以,到網(wǎng)上查了查資料,經(jīng)過(guò)一番“苦斗”,略有小成。感覺(jué)網(wǎng)上目前還沒(méi)有非常完整的解決方案(也可能是我沒(méi)有發(fā)現(xiàn)),遂花了點(diǎn)時(shí)間總結(jié)一下經(jīng)驗(yàn)教訓(xùn),希望與大家共享之。若有什么不足之處,請(qǐng)各位多多指教。
本文中,將以在VS.Net2002中創(chuàng)建一個(gè)實(shí)際項(xiàng)目的方式來(lái)描述在ASP.NET中實(shí)現(xiàn)全球化的基本步驟和需要注意的地方。
第一步,我們創(chuàng)建一個(gè)名為T(mén)estRM的Web Application。這個(gè)項(xiàng)目將缺省包含
- AssemblyInfo.cs
- TestRM.csproj
- TestRM.csproj.webinfo
- TestRM.sln
- TestRM.suo
- TestRM.vsdisco
- WebForm1.aspx(包含aspx.cs和aspx.resx)
- Global.asax(包含asax.cs和asax.resx)
- Web.Config
第二步,需要為項(xiàng)目創(chuàng)建若干不同語(yǔ)種的資源文件。在.Net中,資源文件的擴(kuò)展名是.resx,此文件是基本于XML的,VS.NET提供了非常方便的資源文件編輯工具(個(gè)人感覺(jué)很象XmlSpy),這兒就不多說(shuō)了。在此,以簡(jiǎn)體中文(zh-cn)和美國(guó)英語(yǔ)(en-us)為例。通過(guò)“項(xiàng)目->添加新項(xiàng)->資源文件”向項(xiàng)目中分別添加名為string.en-us.resx和string.zh-cn.resx的資源文件,并在string.en-us.resx中添加一條記錄,內(nèi)容是name:String001;value:Welcome,在string.zh-cn.resx中添加一條記錄name:String001;value:歡迎。其XML文件的結(jié)構(gòu)如下:

<?xml version="1.0" encoding="utf-8" ?>
<root>
...
<data name="String001">
<value>歡迎</value>
</data>
...
</root>
這兒有一點(diǎn)需要說(shuō)明,如果你不是希望通過(guò)修改配置文件動(dòng)態(tài)的切換語(yǔ)種,而是希望通過(guò)設(shè)置Windows的“區(qū)域設(shè)置”功能來(lái)切換語(yǔ)種的話(huà),請(qǐng)?zhí)^(guò)第三步。(有這種需求嗎???-_-)
這樣,當(dāng)此項(xiàng)目被編譯后,在bin目錄下將為出現(xiàn)en-us和zh-cn兩個(gè)子目錄,其中分別有一個(gè)dll文件。名為T(mén)estRM.resources.dll。
第三步,修改Global.asax和Web.Config文件以實(shí)現(xiàn)動(dòng)態(tài)切換語(yǔ)種。
首先,我們需要在Global.asax的Application_BeginRequest事件中添加如下代碼:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ConfigurationSettings.AppSettings["DefaultCulture"]);
}
這是最簡(jiǎn)單的應(yīng)用,當(dāng)然,你可以將一些配置項(xiàng)存儲(chǔ)到Cookie之中。
然后,在Web.Config中添加如下代碼:
<appSettings>
<add key="DefaultCulture" value="zh-cn" />
</appSettings>
注意,appSettings元素與system.web屬于同一層次。
最后,在WebForm1的Page_Load事件中加入如下代碼:
public class WebForm1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
WebForm1 form1 = new WebForm1();
ResourceManager resManager = new ResourceManager(form1.GetType().Namespace + ".string", form1.GetType().Assembly);
System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;

Response.Write(resManager.GetString("String001",ci));
}

...
}
請(qǐng)大家注意上面這段代碼中有下劃線(xiàn)的這行代碼,在VS.NET 2002中,如果使用this.GetType().Namespace和this.GetType().Assembly.FullName得到竟然是ASP和6fqpc_hh, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null,獲得的Assembly顯然是隨機(jī)產(chǎn)生。但在c#的類(lèi)文件和WinForm中是正常的,不清楚是什么原因。結(jié)果當(dāng)然不用說(shuō),肯定是找不到相應(yīng)的資源文件的。
此外,需要強(qiáng)調(diào)的

下一頁(yè)
返回列表
返回首頁(yè) 主站蜘蛛池模板: 中文字幕乱码无码人妻系列蜜桃| 亚洲精品无码专区在线| 黄色大片免费网站| 国产美女在线免费观看| 一本一道波多野结衣一区| 日本成人免费网站| 国产激情一区二区三区成人91| a级毛片在线免费看| 成人精品视频99在线观看免费| 久久综合狠狠色综合伊人| 欧美日韩激情在线一区二区| 免费乱理伦片在线直播| 香蕉视频污网站| 在线视频1卡二卡三卡| 久久精品噜噜噜成人av| 欧美巨大另类极品videosbest| 人人爽人人爽人人片a免费| 精品日产一区二区三区| 国产三级在线视频播放线| 麻豆成人精品国产免费| 国产精品一卡二卡三卡| 91大神精品视频| 在线精品国产一区二区三区| www.夜夜操| 干b视频在线观看| 中文字幕丰满乱孑伦无码专区 | 无码国产精品一区二区免费模式| 久久精品青草社区| 欧美中文字幕在线观看| 亚洲春色第一页| 毛片网站免费观看| 国产婷婷色一区二区三区深爱网| (无码视频)在线观看| 国产麻豆剧果冻传媒免精品费网站 | 国产制服丝袜在线观看| 国产成人yy精品1024在线| 国产欧美色一区二区三区| 你懂的中文字幕| 国产精品四虎在线观看免费| 69sex久久精品国产麻豆| 国产麻豆成人传媒免费观看|