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

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

基于ASP.NET实现全球化


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 57 ::
收藏到网摘: 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实现全球化时的一些心得,希望能对一些朋友有所帮助。