基于ASP.NET实现全球化

ASP.NETMVC3全球化解决方案 本程序为ASP.NET MVC3国际化解决方案框架源程序,包含PDF说明文档 原创作者:eaglet 本开源程序为第一版,以后会陆续更新。 如果觉得好,欢迎五星评价 立即下载

基于ASP.NET实现全球化


    因为项目的关系,这两天一直在研究ASP.NET的全球化问题。我知道,在JAVA体系中有专门的I18N处理方案,.NET中不可能会没有。所以,到网上查了查资料,经过一番“苦斗”,略有小成。感觉网上目前还没有非常完整的解决方案(也可能是我没有发现),遂花了点时间总结一下经验教训,希望与大家共享之。若有什么不足之处,请各位多多指教。
    本文中,将以在VS.Net2002中创建一个实际项目的方式来描述在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文件的结构如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
   ...
 <data name="String001">
  <value>欢迎</value>
 </data>
   ...
</root>
    这儿有一点需要说明,如果你不是希望通过修改配置文件动态的切换语种,而是希望通过设置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>
         <add key="DefaultCulture" value="zh-cn" />
   </appSettings>
        注意,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实现全球化时的一些心得,希望能对一些朋友有所帮助。

基于ASP_NET实现全球化 因为项目的关系,这两天一直在研究ASP.NET的全球化问题。我知道,在JAVA体系中有专门的I18N处理方案,.NET中不可能会没有。所以,到网上查了查资料,经过一番“苦斗”,略有小成。感觉网上目前还没有非常完整的解决方案(也可能是我没有发现),遂花了点时间总结一下经验教训,希望与大家共享之。若有什么不足之处,请各位多多指教。 立即下载

相关推荐

asp.net 全球化和本地化揭秘Demo

asp.net 全球化 本地化 asp.net 全球化和本地化揭秘Demo

理解ASP.NET Core - 全球化&本地化&多语言(Globalization and Localization)

在众多知名品牌的网站中,比如微软官网、YouTube等,我们经常可以见到“切换页面语言”的功能,我们可以选择最适合的语言浏览页面内容。毫无疑问,为网站提供多种语言,页面内容本地化,大大扩展了受众范围,提升了用户体验。实现自定义的方式有两种,分别是通过委托和继承抽象类。下面,我们实现一个从自定义 Header 中获取区域文化信息的自定义。通过委托实现自定义// 从请求头“X-Lang”中获取区域文化信息// 如果值包含多,我们只取前3个}));

2301_78287784的博客 1854

asp.net本地化和全球化

本地化和全球化的资料,适合初学者。这是一个很不错的ppt,大家可以下载来看看

手把手教你设计STM32的JTAG电路:从原理图到PCB布局(含JLINK连接详解)

本文详细介绍了STM32的JTAG电路设计全流程,从核心原理、接口规范到PCB布局布线技巧,特别包含JLINK调试器的连接与配置方法。通过信号滤波、上拉配置和防反接保护等关键设计要点,帮助开发者构建稳定可靠的JTAG调试环境,提升嵌入式开发效率。

weixin_29159441的博客 388

数字后端流程--place

Floorplan完成后芯片的大致框架已经出现,万里长征已经迈出特别重要的第一步了,前面的步骤我们已经完成了io port,macro的摆放,现在core外只剩下std cell(标准单元)了,Place这一步就是要把std cell放进core里。看到密密麻麻的std cell也不用紧张,因为放std cell不用像macro手动一个一个摆,工具就可以帮我们完成大部分工作。虽然这一步的工作只有一个,但也不是只要Place完就能进行下一步的,衡量Place质量是否满足标准会通过以下几点判断。

qq_68400574的博客 771

【微软技术栈】C#.NET 全球化

本文将讨论在全球化应用中处理字符串、日期和时间值以及数值时,应考虑的一些主要问题和遵从的最佳做法。

Coding life, Coding world, Coding feature. 758

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

一文掌握python图形界面开发PyQt6--(一)基本操作、控件、信号与槽、常用控件、布局管理、事件处理、文件对话框

qq_38120851的博客 4043

从Asp.net实现资源全球化和本地化

<br />本文将从Asp.net实现资源全球化和本地化的基本概念入手,阐述在Asp.net1.1和Asp.net2.0中实现全球化和本地化的步骤、方法。<br />一.基本概念<br />1.为什么要实现资源的本地化?<br />        我们的站点可能为全球各个国家和地区的人所浏览,每个国家和地区的人都有自身的语言文化特点。就拿咱们伟大的祖国为例,中国大陆用简体中文,港澳台则使用繁体中文。另外各个国家对于货币、数字、日历等信息的表达格式各有不同,我们国家多使用年月日的格式,而美国则是月日年。诸如此

sunxinyu的专栏 931

CPRI原理及应用--帧结构

对于CPRI 控制字,协议将1个超帧(256基本帧)的控制数据划分为一个“子通道”,将子通道内超帧内的控制字进行行列划分,分为4列X64行,每64个基本帧组成1列。如下图所示。每个Xs子通道内Ns的定义基本相同,在做控制字设计时,主要已Xs和Ns和X.Y.Z开展控制字映射。

u014035968的博客 2325

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法

段子手168的博客 1万+

避坑指南:新手用sysbench压测PostgreSQL时最常见的5个错误和解决办法

本文详细解析了新手使用sysbench对PostgreSQL进行压力测试时常见的5大错误及解决方案,包括SCRAM认证失败、连接数耗尽、依赖缺失、参数配置不当和监控缺失等问题,帮助开发者高效完成性能压测。

weixin_30684743的博客 412

保姆级教程:用GROMACS 2022.4的拉伸模拟(SMD)加速蛋白-蛋白组装过程

本文详细介绍了如何使用GROMACS 2022.4的拉伸分子动力学模拟(SMD)技术加速大蛋白组装过程。通过CHARMM36力场和SMD技术,将传统需要数月的蛋白结合过程缩短至数天,大幅提升模拟效率。文章包含参数设计、索引组创建、周期性边界处理等实战技巧,并提供了完整的GPU加速工作流和常见问题解决方案。

weixin_30338481的博客 445

实现ASP.NET全球化

实现ASP.NET全球化 http://developer.51cto.com/art/200907/138761.htm   本文介绍实现ASP.NET全球化,我们讨论了有关实现ASP.NET全球化的一些重要方面,并且看到,这是非常容易实现的事情。 AD:   一、 ASP.NET全球化信息 在我的网站中,在创建资源文件并加入一些本地化数据后,我首先开始使用...

weixin_33898876的博客 166

FastAPI 高级特性:同异步路由函数、依赖注入与后台任务

在现代 Web 开发中,高效的性能和简洁的代码结构是至关重要的。FastAPI 作为一个现代、快速(高性能)的 Web 框架,凭借其对异步编程的原生支持和直观的依赖注入系统,迅速成为开发者的热门选择。在本文中,将深入探讨 `FastAPI` 中的几个核心概念:同异步函数的区别、`Depends` 依赖以及后台任务。

qq_43629857的博客 203

搞定最强大模型Gemini学生订阅,白嫖一年,包教包会

白嫖现在最强大模型

BUG猿的博客 2万+

在ASP.NET MVC中实现本地化和全球化

  在开发多语言网站时,我们可以为某种语言创建一个资源文件,根据浏览器所设置的不同语言偏好,让运行时选择具体使用哪个资源文件。资源文件在生成程序集的时候被嵌入到程序集。   本篇体验,在ASP.NET MVC中实现全球化和本地化,比如,当浏览器选择英文,就让某些页面元素显示英文;当浏览器选择用中文浏览,则显示中文。   使用Visual Studio 2013创建一个无身份验证的MVC项目。   ...

weixin_34297300的博客 327

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 走近COM Interop——RCW入门
下一篇: 越过调试这道槛——ASP.NET无法调试问题剖析
寒星
博客等级 码龄27年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值