基於語言檔案的asp.net全球化解決方案

來源:互聯網
上載者:User

方案描述
    本方案採用一種語言一個資源檔的方法,能夠有效提高資源檔的可維護性。而VS.NET提供的一個WebForm一個資源檔的方案,無法滿足統一維護的需要。

實現步驟
1. 準備資源檔
    資源檔通常有.resx和.resources兩種,前者是xml檔案,後者是二進位檔案。本方案中採用.resources作為資源檔,因此需要一個第三方提供的資源編輯器對資源檔進行編輯,我使用的是Resourcer,反正只要能編輯資源檔並且儲存為.resources檔案的軟體都可以。在資源檔中添加一些string資源,通常情況下,只會用到string資源,有些項目可能需要全球化的圖片資源,原理裡一樣的,本文就不涉及了。
    資源檔的命名是有規定,該方案中,我把所有的資源檔名設為business.[culture].resources,其中business這個名字可以改,可以改成任何一個你喜歡的名字,[culture]部分必須使用.net允許的文化縮寫,如zh-cn、ja-jp、en-us等。
2. 把資源檔放入項目
    為了方便管理,我把所有的資源檔放在網站的一級目錄Resources中。由於讀取資源檔時要用到資源檔的物理位置,建議把Resources目錄直接放在wwwroot下,否則會因為路徑問題而變得很麻煩。
3. 增加預設語言設定
    在web.config中加入<add key="cultureName" value="zh-cn" />,表明預設情況下使用zh-cn作為預設語言文化。
4. 通過Session設定當前語言
    我們用一個Session變數——Session["cultureName"]來告訴每一個頁面應該使用哪種語言進行初始化。當Session["cultureName"]==null時,表明該變數未設定過,就直接用預設語言文化,即web.config中的設定值。
如果使用者想改變當前的介面語言,只需要設定Session["cultureName"]為指定的文化縮寫即可。

全球化資源輔助管理類
通過這個類你不需要瞭解ResourceManager的使用方法,就可以完成全球化的初始化和資源讀取工作。該類初始化時需要傳入一個Page對象,該對象將用於獲得Session變數值。一般情況下,大家只需要用該類的GetString()方法就可以了。

    /**//// <summary>
    /// 全球化資源輔助管理類
    /// </summary>
    public class ResourceHelper
    {
        private ResourceManager _rm=null;
        private Page _page=null;

        public ResourceHelper(Page page)
        {
            _page=page;
            PrepareResource();
        }
        /**//// <summary>
        /// 獲得當前文化,從Session["cultureName"]取
        /// </summary>
        protected CultureInfo GetCurrentCulture
        {
            get
            {
                if(_page.Session["cultureName"]!=null)
                    return CultureInfo.CreateSpecificCulture(_page.Session["cultureName"].ToString());
                else    //如果Session未設定,則直接從web.config中讀取預設設定
                    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);
        }
    }

為了方便大家學習,做了個Demo給大家參考
關於Demo的一些說明
1. 本示範在WindowsXP Professional+VS.NET2003環境下調試通過
2. 示範中提供了三種語言的資源檔:business.zh-cn.resources, business.en-us.resources,business.ja-jp.resources
它們都放在Resources目錄下,每個資源檔中有001_01、001_02、001_03三個string資源,分別表示使用者名稱、密碼、生日。
3. 通過選擇下拉式列表中的語言,然後按“確定”按鈕,可以完成語言切換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.