小格
没有目标的人,是在帮那些有目标的人完成目标。
posts - 46,  comments - 10,  trackbacks - 0

这是asp.net程序来读取多语言版本Ini配置文件的开发示例,主要分为以下三个部分:

1、     Ini 配置文件

2、     读取Ini配置文件的DLL

3、     Web页面调用与内容显示

4、     数据库表T_User,如右图 

 

首先说明一下Ini 文件格式:如下图其中[M_Index]节点和该节点下的所有的keyvalue

其中[M_Index]节点的名称是对应开发示例中的每个页面所在的文件夹名称的第一个字母加下划线再加该页面的名称组合而成,如 M_Index 则表示Manager文件夹下面有一个Index.aspx 页面,这样就避免了不同文件夹里面有相同页面而导致页面内容显示的问题,其中的key对应页面变量value对应页面显示的内容。

      

上图的解决方案中DLL文件夹中ConfigureManager.dll 就是读取Ini 配置文件的一个封装类,提供方法来获取某个节点里面指定keyvalue

新建项目

准备工作好了以后,下面就开始新建一个项目,打开VS 新建一个项目并命名为“LanVersionSwitch”。

1.         新建一个文件夹DLL 添加现有项把ConfigureManager.dll 添加进来,并添加引用该dll

2.         新建文件夹INI添加现有项把ConfigCn.iniConfigEn.ini 加进来

3.         web.config 中添加配置信息:

Web.config<appSettings>
  <add key="filePathEn" value="INI/ConfigEn.ini"/>
  <add key="filePathCn" value="INI/ConfigCn.ini"/>

</appSettings>

 

4.      新建文件夹Common 并添加一个类LanSwitch.cs来调用dll方法进行再次封装以供web页面调用:

LanSwitchusing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ConfigureManager;
using System.Web.Caching;

namespace LanVersionSwitch.Common
{
  public class LanSwitch
  {

   private static readonly object obj = new object();

   public static string GetValue(string section, string key, string lan)
    {
      string filePath;
      if(HttpContext.Current.Cache[section + "_" + key + "_" + lan] == null)
        {
          lock (obj)
           {
             if (HttpContext.Current.Cache[section + "_" + key + "_" + lan] == null)
               {
                if (lan.ToUpper() == "EN")
                 {
                   filePath =Environment.CurrentDirectory + "/" + System.Configuration.ConfigurationManager.AppSettings["filePathEn"].ToString();
                 }
                 else
                 {
                   filePath = Environment.CurrentDirectory + "/" + System.Configuration.ConfigurationManager.AppSettings["filePathCn"].ToString();
                 }
                   ManagerConfigIni mi = new ManagerConfigIni(filePath);
                   HttpContext.Current.Cache.Add(section + "_" + key + "_" + lan, mi.GetIniKeyValueForStr(section, key), null, DateTime.Now.AddSeconds(5), TimeSpan.Zero, CacheItemPriority.Normal, null);
               }
           }
        }
       return HttpContext.Current.Cache[section + "_" + key + "_" + lan].ToString();
     }
  }
}

 

5.     Common文件夹增加DataAccess.cs 用来访问数据库,判断登录用户名和密码以及修改语言版本。

6.         新建页面Login.aspx如下图:                      

7.         新建文件夹Manager 并添加web页面Index.aspx 如下图

 

8.         Manager 文件夹里面新建PersonalSet.aspx 如下图:

 

9.         Login.aspx 页面登录按钮进行登录判断,代码

Titleprotected void Button1_Click(object sender, EventArgs e)
        {
            DataAccess da = new DataAccess();
            DataSet ds=da.Login(this.TextBox1.Text, this.TextBox2.Text);
            if (ds.Tables[0].Rows.Count>0)
            {
                Session["lan"] = ds.Tables[0].Rows[0]["lan"];
                Session["username"] = ds.Tables[0].Rows[0]["username"];
                Response.Redirect("Manager/Index.aspx");
            }
            else
            {
                this.Label3.Text = "登录失败";
            }
        }
10.      Index.cs 的代码:             

Title       private string path_page = "M_Index";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SetValue();
            }
        }
        private void SetValue()
        {
            string lan = Session["lan"].ToString();
            this.Button3.Text = LanSwitch.GetValue(path_page, "menu1", lan);
            this.Button4.Text = LanSwitch.GetValue(path_page, "menu2", lan);
            this.Button5.Text = LanSwitch.GetValue(path_page, "menu3", lan);
            this.Button6.Text = LanSwitch.GetValue(path_page, "menu4", lan);
            this.Button7.Text = LanSwitch.GetValue(path_page, "menu5", lan);
            this.Button8.Text = LanSwitch.GetValue(path_page, "menu6", lan);

        }    

 

11.      PersonalSet.cs 的代码:  

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using LanVersionSwitch.Common;

namespace LanVersionSwitch.Manager
{
    public partial class PersonalSet : System.Web.UI.Page
    {
        private string path_page = "M_PersonalSet";
        DataAccess da = new DataAccess();
      
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (this.RadioButton1.Checked)
            {
                Session["lan"] = "CN";         
            }
            else
            {
                Session["lan"] = "EN";        
            }
            da.UpdateLan(Session["lan"].ToString(),Session["username"].ToString());
            SetValue();
        }
        private void SetValue()
        {
            string lan = Session["lan"].ToString();
            this.RadioButton1.Text = LanSwitch.GetValue(path_page,"radio1" , lan);
            this.RadioButton2.Text = LanSwitch.GetValue(path_page, "radio2", lan);
            this.Button1.Text = LanSwitch.GetValue(path_page, "save" , lan);
            this.Button2.Text = LanSwitch.GetValue(path_page, "return", lan);
            if (lan == "EN")
            {
                this.RadioButton1.Checked = false;
                this.RadioButton2.Checked = true;
            }
            else
            {
                this.RadioButton1.Checked = true;
                this.RadioButton2.Checked = false;
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                SetValue();
            }
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("Index.aspx");
        }
    }
}

 

12.      从以上的代码图可以看到 SetValue() 主要是页面调用LanSwitch.cs 的方法GetValue(string pagename,string key,string lan)来进行页面内容显示,

其中每个页面的pagename 都是有当前页面所在文件夹第一个字母加”_”再加当前页面的名称组成。

总结:到这里,已经可以生成并运行代码看下运行结果,一个简单的多语言版本切换程序就写好了。

读取Ini 配置文件的一个封装类,提供方法来获取某个节点里面指定keyvalue,以下是DLL 下载地址:

/Files/xiaogelove/ConfigureManager.rar 

 

 

 

 

 

posted on 2010-03-19 16:54 小格 阅读(1287) 评论(4) 编辑 收藏

FeedBack:
2010-03-19 16:55 | 清海扬波      
"登录失败,请重新登录"?
 回复 引用 查看   
2010-03-19 16:59 | kiler      
有个叫NINi的开源项目专门做这个。
 回复 引用 查看   
2010-03-19 23:55 | heaiping      
直接做一个语言包,调用吧
 回复 引用 查看   
2010-04-29 15:21 | GoBar      
这个不错!貌似比资源文件好用!不知道那个Dll在读Key的时候会不会比较耗资源
 回复 引用 查看   
昵称:小格
园龄:2年7个月
粉丝:15
关注:51

<2010年3月>
28123456
78910111213
14151617181920
21222324252627
28293031123
45678910

搜索

 
 

常用链接

随笔档案

我的心情

学习资料

最新评论

阅读排行榜

评论排行榜

推荐排行榜