實現多國語言處理

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web.UI;
using AjaxControlToolkit;

/// <summary>
/// 基頁面,實現多國語言處理等處理
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
    private ArrayList arrPageList = new ArrayList();

    //CultureInfo對象
    protected System.Globalization.CultureInfo cultureInfo;

    //ContentPlaceHolder控件
    protected ContentPlaceHolder mpContentPlaceHolder;

    //頁面ID
    protected string pageId = "";

    //語言設置(默認中文)
    protected string language = "zh-CN";

    //操作類型字符串
    protected string operationTypeString = "";

    #region 構造函數
    /// <summary>
    /// 構造函數
    /// </summary>
    public BasePage()
    {
        //根據類名取得畫面ID
        pageId = this.GetType().Name.Replace("_aspx", "");
        pageId = pageId.Substring(0, 1).ToUpper() + pageId.Substring(1);
    }
    #endregion

    #region 畫面初始化前處理
    /// <summary>
    /// 畫面初始化前處理
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Page_PreLoad(object sender, EventArgs e)
    {
        //設置CultureInfo信息
        cultureInfo = new System.Globalization.CultureInfo(language);
        System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
        System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;

        //從資源文件取得畫面信息
        string resourceValue = (string)base.GetLocalResourceObject("pageInfoResource");

        //設置畫面Title
        f_setPageTitle(resourceValue);

        if (!IsPostBack)
        {

            //設定頁面控件,實現多語言和權限控制
            f_SetControls(this.Page, "", "", pageId);

            //刪除檢索標識
            string clearSession = (string)Request["ClearSession"];

            if (clearSession != null && clearSession.ToLower() == "yes")
            {
                // 關鍵字列表
                ArrayList keys = new ArrayList();
                int keycount = 0;

                keycount = Session.Keys.Count;
                for (int i = 0; i < keycount; i++)
                {
                    keys.Add((string)Session.Keys[i]);
                }

                foreach (string key in keys)
                {
                    // 保證SYSTEM_DATA不被刪除。
                    if (key == "SYSTEM_DATA")
                    {
                        continue;
                    }
                    // 刪除其餘的Session
                    Session.Remove(key);
                }

            }
        }

    }
    #endregion

    #region 畫面控件設置,包括多語言設置和權限設置
    /// <summary>
    /// 畫面控件設置,包括多語言設置和權限設置
    /// </summary>
    /// <param name="page">畫面</param>
    /// <param name="globalMenuId">主菜單ID</param>
    /// <param name="localMenuId">子菜單ID</param>
    /// <param name="pageId">頁面ID</param>
    public void f_SetControls(System.Web.UI.Page page, string globalMenuId, string localMenuId, string pageId)
    {
        //若當前畫面使用了MasterPage,則從MasterPage的ContentPlaceHolder取得個別頁面
        if (page.Master != null)
        {

            //從資源文件取得畫面信息
            string resourceValue = (string)base.GetLocalResourceObject("pageInfoResource");

            //在MasterPage設置畫面信息
            Label lbltitle = (Label)page.Master.FindControl("lbltitle");
            lbltitle.Text = resourceValue;

            //設置畫面Title
            //f_setPageTitle(resourceValue);

            //從MasterPage取得當前畫面
            mpContentPlaceHolder = (ContentPlaceHolder)page.Master.FindControl("mainContent");

            int count = mpContentPlaceHolder.Controls.Count;

            for (int i = 0; i < count; i++)
            {
                //取得當前控件
                Control currentCtrl = mpContentPlaceHolder.Controls[i];

                //若當前控件爲Panel,做以下處理
                if (currentCtrl.GetType().Name == "Panel")
                {
                    //對Panel控件進行多語言處理
                    f_BindControl(currentCtrl);

                    //遍歷Panel控件的子控件
                    foreach (Control ctrl in currentCtrl.Controls)
                    {
                        //對取得的子控件進行多語言處理
                        f_BindControl(ctrl);
                    }
                }
                // 如果當前控件爲TabContainer,進行以下處理
                else if (currentCtrl.GetType().Name == "TabContainer")
                {
                    int tabPanel = currentCtrl.Controls.Count;
                    for (int j = 0; j < tabPanel; j++)
                    {
                        // 取得當前控件
                        Control currentTabCtr = currentCtrl.Controls[j];

                        // 如果當前控件爲TabPanel,進行以下處理
                        if (currentTabCtr.GetType().Name == "TabPanel")
                        {
                            // 對TabPanel控件進行多語言處理
                            f_BindControl(currentTabCtr);

                            Control contrlPanel = currentTabCtr.Controls[0];

                            foreach (Control ctrl in contrlPanel.Controls)
                            {
                                // 如果當前控件爲Panel,進行以下處理
                                if (ctrl.GetType().Name == "Panel")
                                {
                                    foreach (Control subContrl in ctrl.Controls)
                                    {
                                        // 對取得的子控件進行多語言處理
                                        f_BindControl(subContrl);
                                    }
                                }

                                // 對取得的子控件進行多語言處理
                                f_BindControl(ctrl);
                            }
                        }
                    }
                }
                // 如果當前控件爲UpdatePanel,進行以下處理
                else if (currentCtrl.GetType().Name == "UpdatePanel")
                {
                    // 對Panel控件進行多語言處理
                    f_BindControl(currentCtrl);

                    // 遍歷Panel控件的子控件
                    foreach (Control ctrl in currentCtrl.Controls[0].Controls)
                    {
                        // 若當前控件爲Panel,做以下處理
                        if (ctrl.GetType().Name == "Panel")
                        {
                            // 對Panel控件進行多語言處理
                            f_BindControl(ctrl);

                            // 遍歷Panel控件的子控件
                            foreach (Control subCtrl in ctrl.Controls)
                            {
                                // 對取得的子控件進行多語言處理
                                f_BindControl(subCtrl);
                            }
                        }

                        // 對取得的子控件進行多語言處理
                        f_BindControl(ctrl);
                    }
                }
                // 如果當前控件爲MultiView,進行以下處理
                else if (currentCtrl.GetType().Name == "MultiView")
                {
                    // 遍歷MultiView控件的子控件
                    foreach (Control ct in currentCtrl.Controls)
                    {
                        foreach (Control ctrl in ct.Controls)
                        {
                            // 若當前控件爲Panel,做以下處理
                            if (ctrl.GetType().Name == "Panel")
                            {
                                // 對Panel控件進行多語言處理
                                f_BindControl(ctrl);

                                // 遍歷Panel控件的子控件
                                foreach (Control subCtrl in ctrl.Controls)
                                {
                                    // 對取得的子控件進行多語言處理
                                    f_BindControl(subCtrl);
                                }
                            }

                            // 對取得的子控件進行多語言處理
                            f_BindControl(ctrl);
                        }
                        f_BindControl(ct);
                    }
                }
                else
                {
                    //對取得的當前控件進行多語言處理
                    f_BindControl(currentCtrl);
                }
            }

        }
        else
        {
            for (int i = 0; i < page.Controls.Count; i++)
            {
                //取得當前控件
                foreach (Control currentCtrl in page.Controls[i].Controls)
                {
                    //若當前控件爲Panel,進行以下處理
                    if (currentCtrl.GetType().Name == "Panel")
                    {
                        //對Panel控件處理
                        f_BindControl(currentCtrl);

                        //遍歷Panel上的控件
                        foreach (Control ctrl in currentCtrl.Controls)
                        {
                            //對取得的子控件處理
                            f_BindControl(ctrl);
                        }
                    }
                    else
                    {
                        //對取得的當前控件處理
                        f_BindControl(currentCtrl);
                    }

                }
            }
        }
    }
    #endregion
   

    #region 頁面顯示控件名與資源文件進行綁定
    /// <summary>
    /// 頁面顯示控件名與資源文件進行綁定
    /// </summary>
    /// <param name="ctrl">控件</param>
    private void f_BindControl(Control ctrl)
    {
        //取得的控件做以下處理
        if (!string.IsNullOrEmpty(ctrl.ID))
        {
            //取得頁面的控件的資源名
            string resourceKey = ctrl.ID.ToString() + "Resource";

            //通過資源名取得對應的值
            string resourceValue = (string)base.GetLocalResourceObject(resourceKey);

            //將取得的值設置到頁面控件
            if (ctrl.GetType().Name == "Button")
            {
                //Button控件處理
                ((Button)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "Label")
            {
                //Label控件處理
                ((Label)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "HyperLink")
            {
                //HyperLink控件處理
                ((HyperLink)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "LinkButton")
            {
                //LinkButton控件處理
                ((LinkButton)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "Panel")
            {
                //Panel控件處理
                ((Panel)ctrl).GroupingText = resourceValue;
            }
            else if (ctrl.GetType().Name == "Literal")
            {
                //Literal控件處理
                ((Literal)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "CheckBox")
            {
                //CheckBox控件處理
                ((CheckBox)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "RadioButton")
            {
                //RadioButton控件處理
                ((RadioButton)ctrl).Text = resourceValue;
            }
            else if (ctrl.GetType().Name == "DropDownList")
            {
                //DropDownList控件處理

                int index = 1;
                //對DropDownList的ListItem進行多語言處理
                foreach (ListItem listItem in ((DropDownList)ctrl).Items)
                {
                    //TODO 控件命名待確定
                    resourceKey = ctrl.ID.ToString() + "ListItemResource" + index;
                    resourceValue = (string)base.GetLocalResourceObject(resourceKey);
                    listItem.Text = resourceValue;
                    index++;
                }
            }
            else if (ctrl.GetType().Name == "RadioButtonList")
            {
                //RadioButtonList控件處理

                int index = 1;
                //對RadioButtonList的ListItem進行多語言處理
                foreach (ListItem listItem in ((RadioButtonList)ctrl).Items)
                {
                    //TODO 控件命名待確定
                    resourceKey = ctrl.ID.ToString() + "ListItemResource" + index;
                    resourceValue = (string)base.GetLocalResourceObject(resourceKey);
                    listItem.Text = resourceValue;
                    index++;
                }
            }
            else if (ctrl.GetType().Name == "TabPanel")
            {
                //TabPanel控件處理
                ((TabPanel)ctrl).HeaderText = resourceValue;
            }
            else if (ctrl.GetType().Name == "GridView")
            {


                //遍歷GridView Templete's Colums
                int intColums = ((GridView)ctrl).Columns.Count;
                for (int j = 0; j < intColums; j++)
                {
                    //對取得的子控件進行多語言處理
                    resourceKey = ((GridView)ctrl).Columns[j].HeaderText.ToString() + "Resource";
                    string resourceValue2 = (string)base.GetLocalResourceObject(resourceKey);
                    ((GridView)ctrl).Columns[j].HeaderText = resourceValue2;
                }
            }
        }
    }
    #endregion

    #region 設置頁面的Title
    /// <summary>
    /// 設置頁面的Title
    /// </summary>
    /// <param name="title"></param>
    public void f_setPageTitle(string pageInfo)
    {
        this.Page.Title = pageInfo;
    }
    #endregion
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章