asp.net2.0实现语言和主题的切换[网站编程]
本文“asp.net2.0实现语言和主题的切换[网站编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在ASP.NET 2.0 中供应多语言转换和多款式主题转换功效,两种实现情势对比近似,所以放在一同阐明一下.
1. Language switcher 多语言转换
在Quick Start Tutorial 中,介绍了若何存储和利用用户挑选的语言.普通是用一个DropDownList展示支持的语言,供用户挑选,普通是放在masterpage 里面,将用户挑选的语言存储起来 这里用了ASP.NET 2.0的Profile,当然也可以存在cookie session 大概querystring里.在页面里重写InitializeCulture 办法,利用用户之前挑选的语言.因为设置语言的操作 (这里是SelectedIndexChanged事件)发生在InitializeCulture 时间背面,所以在设置操作完成后为了使的当前页面也即刻见效,需求做个重转向,以重新加载本页面,触发InitializeCulture 事件.下面使quickstart中的部份代码,注意红色部份.因为有的页面地址背面大概还存在queystring,所以个人认为红色代码部份最好用Response.Redirect(Request.Url.PathAndQuery);替换.
protected void DropDownLanguage_SelectedIndexChanged(object sender, EventArgs e)
{
string SelectedLanguage = DropDownLanguage.SelectedValue.ToString();
//Save selected user language in profile
Profile.SetPropertyValue("PreferredCulture", SelectedLanguage);
//Force re-initialization of the page to fire InitializeCulture()
Response.Redirect(Request.Url.LocalPath);
}
protected override void InitializeCulture()
{
// override virtual method InitializeCulture() to check if profile contains a user language setting
string UserCulture = Profile.GetPropertyValue("PreferredCulture").ToString();
if ( UserCulture != "")
{
// there is a user language setting in the profile: switch to it
Thread.CurrentThread.CurrentUICulture = new CultureInfo(UserCulture);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(UserCulture);
}
}
为了削减代码的反复,普通会自定义一个customer base page类,使它担当Page类,然后在自定义的页基类中重新InitializeCulture办法.最后把你的每个页面担当自你的自定义页面基类.这样你就不需求每个页面都重写InitializeCulture办法了.
但是上面这个办法还是不是很爽,因为每增添一个页面都要去改正后置代码,来担当自定义页基类.
我们注意到,在InitializeCulture办法中实际上只是改正了当前线程的Culture和UICulture.那么可不可以在一个全局的事件中,比方Application的某个事件,来改正这两个属性呢?很早从前我这么试过,在Application的BeginRequest事件触发时来实现InitializeCulture 的细节,近似于下面代码:
void Application_BeginRequest(object sender, EventArgs e)
{
string lang = string.Empty;//default to the invariant culture
lang = Profile.PreferredCulture;
if (string.IsNullOrEmpty(lang))
{
lang = string.Empty;
}
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
注意红色部份利用其他方法代替,因为在beginrequest触发阶段,profile对象还没有被asp.net成立.可以用cookies代替.
以上是“asp.net2.0实现语言和主题的切换[网站编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |