ASP.NET 2.0上实现本地化

分类: asp.net   出处:iocblog整理  更新时间:2009-06-17   添加到收藏  

  摘要

  由于越来越多的跨国公司需要跨语言的web应用,所以本地化工作变得尤其重要,在asp.net 1.1 中我们使用resourcemanager 类来实现这个工作,而2.0中提供了更加方便的方法和工具来实现。

  导言

  现在很多跨国的商务需求都需要实现多语言,对客户来说他们始终想看到网站是用他们所熟悉的语言来显示的,他们不会关注网站使用的是什么技术,而现在的开发工具或者开发技术并没有在本地化方面做的很好,我们还需要花大量的时间和精力去做本地化的工作。

  asp.net2.0的出现大大简化了这个过程,配合vs.net2005新的特性,我们可以很方便得来自动剥离网站的语言元素,很容易去实现多版本网站,而且许多针对本地化的api同样也可以方便得帮助我们完成这个过程

  .net 1.1中的本地化:

  在1.1中我们使用resourcemanager来实现这个过程,或许对于winform来说这个过程还比较简单,但是vs.net2003并没有给我们webform下的本地化工作带来什么自动化,我们还需要花很多精力在重复复制代码上。

  .net 2.0 中的本地化:

  2.0中的本地化还是基于1.1的,但是却提供了很多自动化工作:

  1、自动生成页面资源文件

  2、方便的编程实现资源文件的访问

  3、自动为页面装载合适的语言

  4、控件和资源文件自动匹配

  5、强类型的资源文件

  6、资源文件编辑器

  7、资源文件使用表达式

  8、资源provider模型

  本地资源文件实现:

  vs.net 2005 菜单-tools-generate local resource,所产生的资源文件将会放在pp_localresources下面

 

 

  上图显示了,不仅aspx文件,用户控件和master页都会自动产生资源文件,自动产生的资源文件名将是原文件名加上.resx,页面上的所有服务器控件,用户控件和在服务器端运行的html控件都会被自动加在资源文件中,下图显示了一个linkbutton的资源文件

 

 

 [iocblog.net 来源]

  可以看到,只有test和tooltip这些涉及到语言的属性被加入了资源文件

 

 

 

  再切换回视图状态可以看到一些属性右边有红色标记,这表明这个属性绑定的是本地资源,通常这些都是ide自动为你做的,再看看上面的alternatetext后面有一个蓝色标记,这表示这个资源是全局的资源
  全局资源的实现:
  在我们的项目中通常有很多重复的东西,比如masterpage,用户控件,菜单,甚至还有一些提示信息等这些东西如果包含在多个页面,我们每次都需要重复制作他们的资源文件,这非常不科学,所以我们要手动的来制定全局资源。这个时候先要建立一个pp_globalresources目录然后在下面添加资源文件,先看看ide提供给我们的资源文件编辑器

 

  非常多种的类型,我们访问全局资源不需要考虑太多,比如说一个资源文件是flags.resx,试试在编译器内输入resources.flags,当再次按下.的时候,智能感应出来了

 

  可见这些资源文件都被编译成了强类型的类,比如说图片资源我们得到的类型是system.drawing.bitmap
  本地资源访问
  通常我们使用meta:resourcekey来指定控件的资源,如果说一个控件的资源前缀是linkbuttonresource1的话,那么它的text属性的资源就是linkbuttonresource1.text,这个是生成资源文件的时候ide自动做的,如果我们需要在程序中访问本地资源可以按照下面的例子:

linkbutton button1 = new linkbutton();
this.lnkselectculture = button1;
button1.id = "lnkselectculture";
button1.postbackurl = "selectculture.aspx";
button1.text = ((string)
base.getlocalresourceobject("linkbuttonresource1.text"));
button1.tooltip = ((string)base.getlocalresourceobject("linkbuttonresource1.tooltip"));

  当然,如果你不想你的控件使用资源文件可以按照下面的例子修改:

<asp:linkbutton id=lnkselectculture postbackurl="selectculture.aspx"
runat="server" meta:localize="false">change culture settings</asp:linkbutton>
全局资源访问
  使用下面的格式来定位全局资源

<%$ resources: [applicationkey], resourcekey%>

  比如从glossary.resx读取资源例子如下

<asp:imagebutton id="btnidesign" runat="server" imageurl="~/images/idesignlogo.jpg"
alternatetext='<%$ resources:glossary, missionsatatement%>'
postbackurl="http://www.idesign.net" meta:resourcekey="imagebuttonresource1" />

  当然你也可以直接用ide的表达式对话框直接来选择

[1] [2] 下一页



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。