当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 基于ASP.NET实现全球化

ASP.NET
Asp.net 时间操作基类(支持短日期,长日期,时间差)
asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
asp.net 数据库备份还原(sqlserver+access)
Asp.Net 数据操作类(附通用数据基类)
Asp.net 弹出对话框基类(输出alet警告框)
Asp.net 文件上传类(取得文件后缀名,保存文件,加入文字水印)
Asp.net Socket客户端(远程发送和接收数据)
Asp.net 字符串操作基类(安全,替换,分解等)
Asp.Net数据输出到EXCEL表格中
asp.net Gridview里添加汇总行
asp.net UpdatePanel的简单用法
asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法
this connector is disabled错误的解决方法
sql事务应用积累
asp.net Page.Controls对象(找到所有服务器控件)
在asp.NET中字符串替换的五种方法
ASP.NET缓存方法分析和实践示例代码
asp.net 在DNN模块开发中遇到的resx怪问题
ASP.NET State service状态服务的问题解决方法
asp.net 结合mysql存储过程进行分页代码

基于ASP.NET实现全球化


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 199 ::
收藏到网摘: n/a

基于ASP.NET实现全球化
共享下,用这个方法是可以的,试验通过
第一步,我们创建一个名为TestRM的Web Application。这个项目将缺省包含 - AssemblyInfo.cs - TestRM.csproj - TestRM.csproj.webinfo - TestRM.sln - TestRM.suo - TestRM.vsdisco - WebForm1.aspx(包含aspx.cs和aspx.resx) - Global.asax(包含asax.cs和asax.resx) - Web.Config 第二步,需要为项目创建若干不同语种的资源文件。在.Net中,资源文件的扩展名是.resx,此文件是基本于XML的,VS.NET提供了非常方便的资源文件编辑工具(个人感觉很象XmlSpy),这儿就不多说了。在此,以简体中文(zh-cn)和美国英语(en-us)为例。通过“项目->添加新项->资源文件”向项目中分别添加名为string.en-us.resx和string.zh-cn.resx的资源文件,并在string.en-us.resx中添加一条记录,内容是name:String001;value:Welcome,在string.zh-cn.resx中添加一条记录name:String001;value:欢迎。其XML文件的结构如下: ... 欢迎 ... 这儿有一点需要说明,如果你不是希望通过修改配置文件动态的切换语种,而是希望通过设置Windows的“区域设置”功能来切换语种的话,请跳过第三步。(有这种需求吗???-_-) 这样,当此项目被编译后,在bin目录下将为出现en-us和zh-cn两个子目录,其中分别有一个dll文件。名为TestRM.resources.dll。 第三步,修改Global.asax和Web.Config文件以实现动态切换语种。 首先,我们需要在Global.asax的Application_BeginRequest事件中添加如下代码: protected void Application_BeginRequest(Object sender, EventArgs e) { Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ConfigurationSettings.AppSettings["DefaultCulture"]); } 这是最简单的应用,当然,你可以将一些配置项存储到Cookie之中。 然后,在Web.Config中添加如下代码: 注意,appSettings元素与system.web属于同一层次。 最后,在WebForm1的Page_Load事件中加入如下代码:public class WebForm1 : System.Web.UI.Page{ private void Page_Load(object sender, System.EventArgs e) { WebForm1 form1 = new WebForm1(); ResourceManager resManager = new ResourceManager(form1.GetType().Namespace + ".string", form1.GetType().Assembly); System.Globalization.CultureInfo ci = System.Threading.Thread.CurrentThread.CurrentCulture;

Response.Write(resManager.GetString("String001",ci)); }
...} 请大家注意上面这段代码中有下划线的这行代码,在VS.NET 2002中,如果使用this.GetType().Namespace和this.GetType().Assembly.FullName得到竟然是ASP和6fqpc_hh, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null,获得的Assembly显然是随机产生。但在c#的类文件和WinForm中是正常的,不清楚是什么原因。结果当然不用说,肯定是找不到相应的资源文件的。 此外,需要强调的一点是,这儿使用了form1.GetType().Namespace + ".string",如果资源文件不是被放置在项目根目录下,而是被放在某个子目录下时,请注意修改项目的缺省命名空间。因为,资源文件被编译后,在项目的资源文件TestRM.resources.dll的Manifest(用ILDASM查看)中会有如下一行,.mresource public 'TestRM.string.zh-CN.resources'或.mresource public 'TestRM.string.en-US.resources'。其基本的构成规则是项目缺省命名空间+资源文件所在目录名+资源文件名[+语种],如果一种项目的资源文件不分语种,如:我们定义了一个名为string.resx的资源文件,此时,编译项目后在bin目录下将不再会产生诸如zh-CN和en-US之类的子目录,资源文件将被直接嵌入项目的Assembly中。同时,在项目的Assembly的Manifest中会有如下一行.mresource public 'TestRM.string.resources'。所以,如果资源文件不是放在项目的根目录,且缺省命名空间没有被改变的话,在试图使用resManager.GetString时将会被提示“无法访问任何语种的资源文件”,原因就是上面所说的。 基本上,上述的这些就是我在研究基于ASP.NET实现全球化时的一些心得,希望能对一些朋友有所帮助。