1.定义用户语言设置信息类,对用户选择的语言进行保存,可以用Session,这里选用的是Cookies.

 

ASP.NET(3):多语言实现using System;
ASP.NET(3):多语言实现
using System.Data;
ASP.NET(3):多语言实现
using System.Configuration;
ASP.NET(3):多语言实现
using System.Linq;
ASP.NET(3):多语言实现
using System.Web;
ASP.NET(3):多语言实现
using System.Web.Security;
ASP.NET(3):多语言实现
using System.Web.UI;
ASP.NET(3):多语言实现
using System.Web.UI.HtmlControls;
ASP.NET(3):多语言实现
using System.Web.UI.WebControls;
ASP.NET(3):多语言实现
using System.Web.UI.WebControls.WebParts;
ASP.NET(3):多语言实现
using System.Xml.Linq;
ASP.NET(3):多语言实现
using CommonUtility;
ASP.NET(3):多语言实现

由于对Cookies的访问有一定的限制,Request对象时候读,Response对象写,所以我们需要将用户选择语言的值保存在其它对象里面,可以保存在Session里,这里选择保存在HttpContext.Items中。

2.定义HttpModule,每次访问的时候根据用户的设置来改变语言

 

 MYHttpModule : IHttpModule
{
    HttpApplication context;
    public PhenixHttpModule()
    {
     
    }

    
#region IHttpModule 成员

    
public void Dispose()
    {
        UnityContainer.ObjectProvider 
= null;
        context.PostAcquireRequestState 
-= new EventHandler(context_PostAcquireRequestState);
        
    }

    
public void Init(HttpApplication context)
    {
        
this.context = context; 
        context.PostAcquireRequestState 
+= new EventHandler(context_PostAcquireRequestState);
    }

    
void context_PostAcquireRequestState(object sender, EventArgs e)
    {
        var app 
= sender as HttpApplication;

        
if (UnityContainer.ObjectProvider == null)
        {
            var provider 
= new ASPNETObjectProvider();
            UnityContainer.ObjectProvider 
= provider;
        }

        System.Globalization.CultureInfo ci 
= new System.Globalization.CultureInfo(UnityContainer.GetObject<ILocalizer>().LocalizerName);
        System.Threading.Thread.CurrentThread.CurrentCulture 
= ci;
        System.Threading.Thread.CurrentThread.CurrentUICulture 
= ci;
    }

    
#endregion
}

 

3.在Web.Config中添加记录

 

<httpModules>
      
<add name="MYModule" type="MYHttpModule"/>
</httpModules>

 

4.定义资源文件存取对象ResourceManager

 

public class ResourceManager
{
    XElement ResourceManager;
    public Localizer()
    {
       //可以根据自己的需要处理资源文件的读取
        var culture = System.Threading.Thread.CurrentThread.CurrentCulture;

        var filepath = HttpContext.Current.Server.MapPath("~/App_Code/"+ culture.Name+"/lang.xml");
        xmlLocalizer = XElement.Load(filepath);
    }

    public Localizer()
        : this())
    {
    }

    public string GetString(string id)
    {
         return return xmlLocalizer.Descendants("resource").Where(p => p.Attribute("name").Value == id).Select(p1 => p1.Value).FirstOrDefault();
    }
}

 

5.在需要赋值的地方,实例化赋值即可

 

说明:初学ASP.NET,此方案很不成熟,自己练手用。

相关文章: