基于语言文件的asp.net全球化解决方案
方案描述
??? 本方案采用一種語(yǔ)言一個(gè)資源文件的方法,能夠有效提高資源文件的可維護(hù)性。而VS.NET提供的一個(gè)WebForm一個(gè)資源文件的方案,無法滿足統(tǒng)一維護(hù)的需要。
實(shí)現(xiàn)步驟
1. 準(zhǔn)備資源文件
??? 資源文件通常有.resx和.resources兩種,前者是xml文件,后者是二進(jìn)制文件。本方案中采用.resources作為資源文件,因此需要一個(gè)第三方提供的資源編輯器對(duì)資源文件進(jìn)行編輯,我使用的是Resourcer,反正只要能編輯資源文件并且保存為.resources文件的軟件都可以。在資源文件中添加一些string資源,通常情況下,只會(huì)用到string資源,有些項(xiàng)目可能需要全球化的圖片資源,原理里一樣的,本文就不涉及了。
??? 資源文件的命名是有規(guī)定,該方案中,我把所有的資源文件名設(shè)為business.[culture].resources,其中business這個(gè)名字可以改,可以改成任何一個(gè)你喜歡的名字,[culture]部分必須使用.net允許的文化縮寫,如zh-cn、ja-jp、en-us等。
2. 把資源文件放入項(xiàng)目
??? 為了方便管理,我把所有的資源文件放在網(wǎng)站的一級(jí)目錄Resources中。由于讀取資源文件時(shí)要用到資源文件的物理位置,建議把Resources目錄直接放在wwwroot下,否則會(huì)因?yàn)槁窂絾栴}而變得很麻煩。
3. 增加默認(rèn)語(yǔ)言設(shè)置
??? 在web.config中加入<add key="cultureName" value="zh-cn" />,表明默認(rèn)情況下使用zh-cn作為默認(rèn)語(yǔ)言文化。
4. 通過Session設(shè)置當(dāng)前語(yǔ)言
??? 我們用一個(gè)Session變量——Session["cultureName"]來告訴每一個(gè)頁(yè)面應(yīng)該使用哪種語(yǔ)言進(jìn)行初始化。當(dāng)Session["cultureName"]==null時(shí),表明該變量未設(shè)置過,就直接用默認(rèn)語(yǔ)言文化,即web.config中的設(shè)置值。
如果用戶想改變當(dāng)前的界面語(yǔ)言,只需要設(shè)置Session["cultureName"]為指定的文化縮寫即可。
全球化資源輔助管理類
通過這個(gè)類你不需要了解ResourceManager的使用方法,就可以完成全球化的初始化和資源讀取工作。該類初始化時(shí)需要傳入一個(gè)Page對(duì)象,該對(duì)象將用于獲得Session變量值。一般情況下,大家只需要用該類的GetString()方法就可以了。
????///?全球化資源輔助管理類
????///?</summary>
????public?class?ResourceHelper
????{
????????private?ResourceManager?_rm=null;
????????private?Page?_page=null;
????????public?ResourceHelper(Page?page)
????????{
????????????_page=page;
????????????PrepareResource();
????????}
????????/**////?<summary>
????????///?獲得當(dāng)前文化,從Session["cultureName"]取
????????///?</summary>
????????protected?CultureInfo?GetCurrentCulture
????????{
????????????get
????????????{
????????????????if(_page.Session["cultureName"]!=null)
????????????????????return?CultureInfo.CreateSpecificCulture(_page.Session["cultureName"].ToString());
????????????????else????//如果Session未設(shè)置,則直接從web.config中讀取默認(rèn)設(shè)置
????????????????????return?CultureInfo.CreateSpecificCulture(System.Configuration.ConfigurationSettings.AppSettings["cultureName"]);
????????????}
????????}
????????/**////?<summary>
????????///?初始化資源管理
????????///?</summary>
????????public?void?PrepareResource()
????????{
????????????_rm?=?ResourceManager.CreateFileBasedResourceManager("business",_page.Server.MapPath("resources")+System.IO.Path.DirectorySeparatorChar,null);
????????}
????????/**////?<summary>
????????///?獲得資源指針
????????///?</summary>
????????protected?ResourceManager?resource
????????{
????????????get
????????????{
????????????????if(_rm==null)
????????????????????PrepareResource();
????????????????return?_rm;
????????????}
????????}
????????/**////?<summary>
????????///?獲得資源字符串
????????///?</summary>
????????///?<param?name="ResourceID">資源ID</param>
????????///?<returns></returns>
????????public?string?GetString(string?ResourceID)
????????{
????????????return?this.resource.GetString(ResourceID,this.GetCurrentCulture);
????????}
????}
為了方便大家學(xué)習(xí),做了個(gè)Demo給大家參考
關(guān)于Demo的一些說明:
1. 本演示在WindowsXP Professional+VS.NET2003環(huán)境下調(diào)試通過
2. 演示中提供了三種語(yǔ)言的資源文件:business.zh-cn.resources, business.en-us.resources,business.ja-jp.resources
它們都放在Resources目錄下,每個(gè)資源文件中有001_01、001_02、001_03三個(gè)string資源,分別表示用戶名、密碼、生日。
3. 通過選擇下拉式列表中的語(yǔ)言,然后按“確定”按鈕,可以完成語(yǔ)言切換
總結(jié)
以上是生活随笔為你收集整理的基于语言文件的asp.net全球化解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无异常运行AMSN
- 下一篇: asp.net ajax控件工具集 Au