ASP.NET 下的资源文件使用

资源文件通常用在Winform中比较多,其实ASP.NET也可以使用资源文件实现多语言化。
朋友托我帮他做个小站,2钟语言版本的,我想既然是小站那也得给它加点料。刚学了
点资源文件的皮毛,那就用上了哈。示例网站如下http://www.donglongcf.cn.
下面开始如何一步步建立多语言化网站。
第一步:
新建2个资源文件,其中命名为Resource.resx,Resource_En.resx代表英文。
在界面上Aspx文件上,直接
  
1  <%=  Resources.Resource.String1  %>


控件中绑定 可以这样
1  < asp:Label ID = " lbl_global "  runat = " server "  Text = " <%# Resources.Resource.Button1 %> " ></ asp:Label >



也可以这样   
1    < asp:TextBox ID = " TextBox1 "  runat = " server "   Text = " <%$ Resources:Resource, String1 %> "   ></ asp:TextBox >



就可以将对应的资源文件的值读取出来
但是,通常我们不是这样使用资源文件。只有在语言切换的时候,才显示不同的语言。比如
点击中文,显示中文语言包,英文则显示英文语言包。所以 我们要对当前语言环境进行设置
第二步:
在页面初始化的时候,设定当前语言环境,中文值为zh-CN,英文则为en-US
1  Thread.CurrentThread.CurrentUICulture  =  CultureInfo.CreateSpecificCulture( " zh-CN " );




但是,我们依然不满足,我们没必要在每个页面的page_load里都加这么一句,太繁琐。
第三步,重写页面的InitializeCulture方法
新建一个InitialCulture
  
 1  protected   override   void  InitializeCulture()
 2      {
 3           // 当前语言变量放在了Session里 也可以放Cookie
 4           if  (Session[ " lang " !=   null )
 5          {
 6              Thread.CurrentThread.CurrentUICulture  =  CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
 7              Thread.CurrentThread.CurrentCulture  =  CultureInfo.CreateSpecificCulture(Session[ " lang " ].ToString());
 8               //  base.InitializeCulture();
 9          }
10           else
11          {
12              Thread.CurrentThread.CurrentUICulture  =  CultureInfo.CreateSpecificCulture( " zh-CN " );
13              Thread.CurrentThread.CurrentCulture  =  CultureInfo.CreateSpecificCulture( " zh-CN " );
14          }
15           base .InitializeCulture();
16      }


然后每个页面重新继承:
1  public   partial   class  _Default :InitialCulture




如果你是个懒惰的程序员,那么每个页面加这么一句肯定也不会满足你。这时 就嗅到了bad smell.
第四步,
建立httpMoudle
通过在httpModle实现全局的控制
 1       // 应用程序初始化
 2         public   void  Init(HttpApplication app)
 3          {
 4              app.AcquireRequestState  +=   new  EventHandler(context_AcquireRequestState);
 5           // 这里委托在AcquireRequestState 进行操作是 因为我把全局语言变量 放在了session里
 6           // 而session 的生成是 在AcquireRequestState 才有效
 7          }
 8 
 9           void  context_AcquireRequestState( object  sender, EventArgs e)
10          {
11              HttpApplication app  =  sender  as  HttpApplication;
12              LangGuage(app);
13          }
14 
15           private   void  LangGuage(HttpApplication app)
16          {
17              
18               if  (app.Context.Session[ " lang " ==   null )
19                  app.Context.Session[ " lang " =   " zh-CN " ;
20              Thread.CurrentThread.CurrentUICulture  =  CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
21              Thread.CurrentThread.CurrentCulture  =  CultureInfo.CreateSpecificCulture(app.Context.Session[ " lang " ].ToString());
22          }
23           #endregion




这样我们的网站多语言话就初步完成了 剩下的就只是对资源文件的使用而已了
源码下载地址 http://www/kobewang.cn

你可能感兴趣的:(asp.net)