仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 632|回复: 9
打印 上一主题 下一主题

[学习教程] ASP.NET编程:ASP.NET 多言语的完成(背景动静+前台消...

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
那做企业软件是不是最好用J2EE?一媒介

界面撑持多种言语,在利用ASP.NET自带的多言语计划时碰到以下成绩:

在做办理类的功效时,有增加、修正和检察页面,必要撑持多言语的控件基础不异,但要保护多处,发生冗余(ASP.NET有共享的资本,但它是全局的,不克不及分模块,我们不克不及所模块的信息进在全局资本中);
在页面中必需要指定资本文件中的KEY;
当页面慢来慢多时,页面与资本的婚配其实难以保护;

以是我以为一个幻想的撑持多言语框架,必要有以下特征:

分模块办理数据冗余成绩;
主动婚配页面与资本文件之间的接洽;
易于保护,能经由过程页面疾速定位到资本文件中;
撑持背景动静的多言语完成
撑持前台JS动静的多言语完成

二背景动静多言语的完成

在完成背景动静多言的完成时,次要使用ASP.NET的特征,经由过程修正以后线程的地区言语,来猎取对应版本的资本。由于ASP.NET在处置哀求时,会利用一个独自的线程来实行一次哀求的一切代码,以是我们只必要在一个中央重写以后线程的言语信息,在别的任何中央都能够猎取以后言语版本的资本文件。重写以后线程的地区言语的代码以下:


protectedoverridevoidInitializeCulture()
{
stringlanguage="en";//默许为英文
if(Session["Language"]!=null)language=Session["Language"].ToString();
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(language);
Thread.CurrentThread.CurrentUICulture=CultureInfo.CreateSpecificCulture(language);
}



在定名资本文件名时,划定规矩以下:

默许言语的版本间接当一般定名,如定名OrderResource.resx
别的版本的资本文件名,应加上地区称号,如OrderResource.zh-cn.resx,OrderResource.en-us.resx.

将背景动静放在资本文件后,程序中只援用主的资本文件,如许在线程的地区信息变动后,会主动的援用别的言语版本的资本。好比在程序中利用以下代码:

Response.Write(OrderResource.FiledRequired);//当地区信息为英文时,输入"TheFiledisrequired!";当地区信息为中文时,输入"字段必填!"

三前台JS多言语的完成

前台的多言语完成,即在JS中必要弹出一些提醒也必要多言语。前台多言语的完成办法完成有良多,在本例中,我们接纳的一致的办理体例,把JS多言语信息一样放在资本文件中,只不外在一个大众的中央,把资本序列成一个json工具,然后JS中即可以利用了。固然,在完成此功效时,必要做一些缓存的事情。次要代码以下:


publicstaticDictionary<string,string>JsonResources=newDictionary<string,string>();

//把资本文件序列化成JSON
publicstaticstringGetJsonResource()
{
stringkey=string.Format("JSResource.{0}",System.Threading.Thread.CurrentThread.CurrentCulture.Name);
if(!JsonResources.ContainsKey(key))
{
JavaScriptSerializerserialzer=newJavaScriptSerializer();
ResourceSetrs=JSResource.ResourceManager.GetResourceSet(System.Threading.Thread.CurrentThread.CurrentCulture,true,true);
stringjson=string.Format("[{0}]",serialzer.Serialize(rs.OfType<DictionaryEntry>().ToDictionary(x=>x.Key,x=>x.Value)));
JsonResources.Add(key,json);
}
returnJsonResources[key];
}

protectedoverridevoidOnPreRenderComplete(EventArgse)
{
//输入JSON工具到页面
Page.ClientScript.RegisterStartupScript(Page.GetType(),"","<scriptlanguage="javascript">varjson=eval("+ResourceCache.GetJsonResource()+");JSResource=json[0];</script>");
}



在页面中就能够利用JSResource工具了,如alert(window.JSResource.JSMsg);
四页面中的元素主动婚配资本文件

此功效有一个条件就是资本文件中的KEY为控件ID而且为页面指定特定资本文件,如许我们就能够为控件主动婚配了。在婚配的过程当中,假如在指定的资本文件中未找到,那末会到大众的文件中查找。

注重:

1>为页面指定特定资本文件,次要是用于多个页面(模块)共享一个资本,模块的巨细能够本人把持;

2>有一个大众的资本文件,在全部项目中,总有一些信息是各个模块所通用的;

次要代码:


publicclassResourceFactory
{
publicstaticResourceAccessGetResource(System.Resources.ResourceManagerresMgr)
{
returnnewResourceAccess(resMgr,CommonResource.ResourceManager);
}
}

publicclassResourceAccess
{
privateResourceManagerresourceManager=null;

privateResourceManagercommonResourceManager=null;

publicResourceAccess(ResourceManagerresourceManager,ResourceManagercommonResourceManager)
{
this.resourceManager=resourceManager;
this.commonResourceManager=commonResourceManager;
}

publicstringGetString(stringname)
{
stringstr=this.resourceManager.GetString(name);

if(string.IsNullOrEmpty(str))
{
str=this.commonResourceManager.GetString(name);
if(string.IsNullOrEmpty(str))
{
str=string.Format("【{0}】notexist",name);
}
}
returnstr;
}
}

publicclassBasePage:Page
{
#regionMultLanguage
protectedoverridevoidInitializeCulture()
{
stringlanguage="en";//默许为英文
if(Session["Language"]!=null)language=Session["Language"].ToString();
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture(language);
Thread.CurrentThread.CurrentUICulture=CultureInfo.CreateSpecificCulture(language);
}

publicSystem.Resources.ResourceManagerPageResourceManager{set;get;}
privateResourceAccessresourceAccess;
privateLiterallit;
privateButtonbtn;
privateLinkButtonlibtn;

protectedoverridevoidOnPreRenderComplete(EventArgse)
{
//输入JSON工具到页面
Page.ClientScript.RegisterStartupScript(Page.GetType(),"","<scriptlanguage="javascript">varjson=eval("+ResourceCache.GetJsonResource()+");JSResource=json[0];</script>");
if(!IsPostBack)
{
//绑定页面的文本
if(PageResourceManager!=null)
{
resourceAccess=ResourceFactory.GetResource(PageResourceManager);
//wedonotuserecursion,becauseitcreatetoomuchstack.
foreach(ControlcinPage.Controls)//Largecontrolofpage,likeHTML,Form
{
foreach(ControlchildCinc.Controls)//Normalcontrolofpage,likebutton,literal
{
BindControlLanguage(childC);

foreach(ControlchildCCinchildC.Controls)//Containercontrolofpage(ifonecontrlhaschildcontrols)
{
BindControlLanguage(childCC);

foreach(ControlchildCCCinchildCC.Controls)
{
BindControlLanguage(childCCC);
foreach(ControlchildCCCCinchildCCC.Controls)
{
BindControlLanguage(childCCCC);
}
}
}
}
}
}
}
base.OnPreRenderComplete(e);
}

privatevoidBindControlLanguage(Controlc)
{
if(cisLiteral)
{
lit=(Literal)c;
if(lit.Text=="")
{
lit.Text=resourceAccess.GetString(lit.ID);
}
}
elseif(cisButton)
{
btn=(Button)c;
btn.Text=resourceAccess.GetString(btn.ID);
}
elseif(cisLinkButton)
{
libtn=(LinkButton)c;
if(libtn.Text=="")
{
libtn.Text=resourceAccess.GetString(libtn.ID);
}
}
}
#endregion
}


五最后的效果
英文版本

中版本

全体代码下载
那做企业软件是不是最好用J2EE?
飘灵儿 该用户已被删除
沙发
发表于 2015-1-19 06:49:42 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
深爱那片海 该用户已被删除
板凳
发表于 2015-1-24 22:58:52 | 只看该作者
asp.net最主要特性包括:◆编程代码更简洁◆网站可实现的功能更强大◆运行效率高◆节省服务器的动作资源
活着的死人 该用户已被删除
地板
发表于 2015-2-2 14:53:54 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
小妖女 该用户已被删除
5#
发表于 2015-2-7 23:28:19 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
分手快乐 该用户已被删除
6#
发表于 2015-2-7 23:28:19 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
小魔女 该用户已被删除
7#
发表于 2015-2-23 18:42:30 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
海妖 该用户已被删除
8#
发表于 2015-3-7 09:56:09 | 只看该作者
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
9#
发表于 2015-3-14 22:45:33 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
透明 该用户已被删除
10#
发表于 2015-3-21 15:29:36 | 只看该作者
JSP/Servlet虽然在国内目前的应用并不广泛,但是其前途不可限量。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表