仓酷云

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

[学习教程] ASP.NET网页设计C#的Windows编程中多言语的完成

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

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

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

x
因为二次编译器太复杂,那么建议只是在安装程序的时候编译一次,而不类似java那样运行就编译。并且我觉得,一次痛苦,总比多次低效率要舒服多了。window|编程  完成多言语的办法是经由过程设置文件完成,经由过程从设置文件中读取资本,然后在显现窗口的时分,即Load()办法中,静态显现响应的选择言语。

  上面是在C#的Windows编程中完成多言语的步骤:

  第一步:设置默许言语和修正默许言语

  我们界说了一个XML文件来寄存默许言语,文件名为LanguageDefine.xml。

  LanguageDefine.xml

<?xmlversion="1.0"standalone="yes"?>
<Language>
<DefaultLanguage>ZH</DefaultLanguage>
</Language>
  该文件只要一个DefaultLanguage属性,用于寄存默许言语,必要注重的是这个属性要与言语设置文件中_后的字符串不异。

  上面是用于读取默许言语和修正默许言语的函数:

//读取默许言语
publicstaticstringReadDefaultLanguage(){
 XmlReaderreader=newXmlTextReader("resources/LanguageDefine.xml");
 XmlDocumentdoc=newXmlDocument();
 doc.Load(reader);
 XmlNoderoot=doc.DocumentElement;
 //拔取DefaultLangugae节点
 XmlNodenode=root.SelectSingleNode("DefaultLanguage");

 stringresult="EN";
 if(node!=null)
  //掏出节点中的内容
  result=node.InnerText;

  reader.Close();
 returnresult;
}
//修正默许言语
publicstaticvoidWriteDefaultLanguage(stringlang){
 DataSetds=newDataSet();
 ds.ReadXml("resources/LanguageDefine.xml");
 DataTabledt=ds.Tables["Language"];

 dt.Rows[0]["DefaultLanguage"]=lang;
 ds.AcceptChanges();
 ds.WriteXml("resources/LanguageDefine.xml");
}
  我们又用一个XML文件来存储要显现的言语的品种,和在特定的言语下言语选择下拉菜单的显现笔墨。现我们只机关了两种言语,不外经由过程增加Item,我们能够很简单的完成增添一种言语的功效。

  我们是经由过程一个ComboBox下拉菜单来完成多言语的选择的,中选择了响应的言语时,我们会把体系的默许言语,即LanguageDefine.xml中的言语改成所选的言语。同时,体系即刻从头Load(),以显现所选择的言语对应的界面。

  ppConfig.xml

<?xmlversion="1.0"encoding="gb2312"?>
<AppConfig>
<Area>
<Language>ZH</Language>
<List>
<Item>中文[ZH]</Item>
<Item>英文[EN]</Item>
</List>
</Area>
<Area>
<Language>EN</Language>
<List>
<Item>Chinese[ZH]</Item>
<Item>English[EN]</Item>
</List>
</Area>
<Area>
</AppConfig>
  响应的读取该设置文件的函数是:

publicstaticIListGetLanguageList(stringlang){
IListresult=newArrayList();

XmlReaderreader=newXmlTextReader("resources/AppConfig.xml");
XmlDocumentdoc=newXmlDocument();
doc.Load(reader);

XmlNoderoot=doc.DocumentElement;
XmlNodeListnodelist=root.SelectNodes("Area[Language="+lang+"/List/Item");
foreach(XmlNodenodeinnodelist){
 result.Add(node.InnerText);
}
reader.Close();

returnresult;
}
  第三步:依据言语猎取要显现页面的显现值

  经由过程下面的几步,我们能够在每一个页面的Load()办法中,依据ReadDefaultLanguage()函数,猎取这个页面的显现言语。获得默许言语后,我们要该言语的资本文件中读取响应的资本。

  该资本文件的格局以下(现只显现英文的资本文件,中文资本文件的格局与其不异,只是text中的值换成了响应的中文值):

  AppResource_EN.xml

<?xmlversion="1.0"encoding="utf-8"?>
<Resource>
<Form>
<Name>FrmLogon</Name>
<Controls>
<Controlname="frmlogon"text="Userlogon"/>
<Controlname="lblusername"text="Username:"/>
<Controlname="lblpassword"text="Password:"/>
<Controlname="lbllanguage"text="Language:"/>
<Controlname="btnlogon"text="Logon"/>
<Controlname="btncancel"text="Exit"/>
<Controlname="btnchangepwd"text="ChangePassword"/>
</Controls>
</Form>
<Form>
<Name>FrmPasswordChange</Name>
<Controls>
<Controlname="frmpasswordchange"text="Changepassword"/>
<Controlname="lblusername"text="Username:"/>
<Controlname="lblpassword"text="OldPassword:"/>
<Controlname="lblnewpassword"text="NewPassword:"/>
<Controlname="lblpasswordconfirm"text="PasswordConfirm:"/>
<Controlname="btnok"text="OK"/>
<Controlname="btncancel"text="Return"/>
</Controls>
</Form>
</Resource>
  我们把一个窗体中要完成多言语显现的控件的称号全都放在<Controls></Controls>中,name指的是控件的Name属性,而text指的是控件的Text属性。

  读取的函数以下:

///<summary>
///读取多言语的资本文件
///</summary>
///<paramname="frmName">窗体的Name</param>
///<paramname="lang">要显现的言语(如ZH或EN)</param>
///<returns></returns>
publicstaticHashtableReadResource(stringfrmName,stringlang){
 Hashtableresult=newHashtable();

 XmlReaderreader=null;
 FileInfofi=newFileInfo("resources/AppResource_"+lang+".xml");
 if(!fi.Exists)
  reader=newXmlTextReader("resources/AppResource.xml");
 else
  reader=newXmlTextReader("resources/AppResource_"+lang+".xml");

 XmlDocumentdoc=newXmlDocument();
 doc.Load(reader);

 XmlNoderoot=doc.DocumentElement;
 XmlNodeListnodelist=root.SelectNodes("Form[Name="+frmName+"]/Controls/Control");
 foreach(XmlNodenodeinnodelist){
  try{
   XmlNodenode1=node.SelectSingleNode("@name");
   XmlNodenode2=node.SelectSingleNode("@text");
   if(node1!=null){
    result.Add(node1.InnerText.ToLower(),node2.InnerText);
   }
   }catch(FormatExceptionfe){
    Console.WriteLine(fe.ToString());
   }
  }
  reader.Close();
 returnresult;
}
  第四步:显现响应的值

  我们能够在每一个窗体的Load()事务中,挪用响应的函数,来完成这个功效。固然,我们起首必需先,取得这个窗体要显现的言语的代码(如EN或ZH),该值能够寄存在一个"全局"变量中(好比把值经由过程Global.SetValue("lang",langugae)存进,经由过程Global.GetValue("lang")掏出)。

///<summary>
///猎取控件的称号
///</summary>
///<paramname="form"></param>
publicstaticvoidgetNames(Formform)
{

 //依据用户选择的言语取得表的显现笔墨
 Hashtabletable=  AppConfig.ReadResource(form.Name,Global.GetValue("lang").ToString());
 Control.ControlCollectioncontrolNames=form.Controls;
 //能够在这里设置窗体的一些一致的属性,如许一切的窗体城市使用该设置
 //form.KeyPreview=true;
 //form.MaximizeBox=false;
 //form.MinimizeBox=false;
 //form.ControlBox=false;
 //form.FormBorderStyle=FormBorderStyle.FixedDialog;
 //form.StartPosition=FormStartPosition.CenterScreen;
 //form.TopMost=true;
 //form.KeyDown+=newKeyEventHandler(OnEnter);
 try
 {
  foreach(ControlcontrolincontrolNames)
  {
   if(control.GetType()==typeof(System.Windows.Forms.Panel))
GetSubControls(control.Controls,table);

   if(control.GetType()==typeof(System.Windows.Forms.GroupBox))
GetSubControls(control.Controls,table);

   //if(control.GetType()==typeof(System.Windows.Forms.TextBox)&&control.Enabled)
   //control.GotFocus+=newEventHandler(Txt_Focus);

   if(table.Contains(control.Name.ToLower()))
control.Text=(string)table[control.Name.ToLower()];
  }
  if(table.Contains(form.Name.ToLower()))
   form.Text=(string)table[form.Name.ToLower()];
 }
 catch(Exceptionex)
  Console.WriteLine(ex.ToString());
}
  由于有些控件其外部另有子控件,以是我们还要有个读取控件中子控件的显现值的函数。

///<summary>
///取得子控件的显现名
///</summary>
///<paramname="controls"></param>
///<paramname="table"></param>
privatestaticvoidGetSubControls(Control.ControlCollectioncontrols,Hashtabletable)
{
 foreach(Controlcontrolincontrols)
 {
  if(control.GetType()==typeof(System.Windows.Forms.Panel))
GetSubControls(control.Controls,table);

  if(control.GetType()==typeof(System.Windows.Forms.GroupBox))
GetSubControls(control.Controls,table);

  if(table.Contains(control.Name.ToLower()))
control.Text=(string)table[control.Name.ToLower()];
 }
}你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:)
再现理想 该用户已被删除
沙发
发表于 2015-1-19 23:01:57 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-28 06:11:22 | 只看该作者
业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
变相怪杰 该用户已被删除
地板
发表于 2015-2-5 12:43:28 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
乐观 该用户已被删除
5#
发表于 2015-2-11 20:55:15 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
6#
发表于 2015-3-11 05:35:27 | 只看该作者
那么,ASP.Net有哪些改进呢?
因胸联盟 该用户已被删除
7#
发表于 2015-3-17 21:10:41 | 只看该作者
对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-4 02:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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