ASP.NET网页设计ASP.NET2.0使用的环球化与当地化之当地...
我也不知道,我原来理解的,NET就是C++编程,只是与JAVA相对,呵呵。以为.ET就是高级C++编程。asp.net<P> 择要:本文将经由过程一个实践案例来具体分析怎样完成一个ASP.NET2.0网站开辟过程当中的环球化与当地化成绩。1、简介
环球化和当地化是每位开辟者在创立环球化产物或使用程序时必需分明的两个主要的慨念。只管有很多文章对这个标题作过较好的注释,可是我一向没有看到一篇周全而综合地会商关于环球化/当地化的一切主要观点的文章。本文旨在经由过程一个详细案例来具体剖析利用ASP.NET2.0开辟一个web使用程序时所触及到的环球化成绩。
2、背景实际
环球化是使用程序开辟中某一阶段的义务,其目标是使程序可以跨多个文明区域可用而不用顾及言语和区域性不同。比方,你在开辟一个小型库存办理程序,而你生存在比方英格兰如许一个以英语为次要言语的区域。如今,假如你想把你的程序卖到另外一个分歧国度,例如说是德国,那末你必要确保你的程序以德语显现并完成输出。
当地化是利用一种区域特定的文明和言语来创立内容、输出和输入数据的历程。文明将会影响日期显现设置(如是mm/dd/yyyy仍是dd/mm/yyyy),泉币显现格局等。如今,确保我们的程序可以被当地化的历程称为国际化或环球化。用更复杂的术语来讲,环球化可以被界说为一组举动,经由过程这一举动,能够确保我们的程序可以运转在利用分歧言语和文明的区域。
因而,环球化是与内涵代码的改动相干联的以便撑持如许的改动,如利用资本文件等;而当地化是利用一种特定的文明和区域性信息的历程,以便该程序可以利用当地的言语和文明。这意味着要把字符串翻译成一个特定的当地的言语;为此,要把言语特定的字符串放到资本文件中。一样平常地,应当从主构建和代码开辟阶段就入手下手思索环球化成绩,而当地化一般在今后才完成。
3、完成ASP.NET2.0网站的环球化
让我们从一个复杂的示例入手下手。为懂得释当地化并使事变尽量复杂,我利用ASP.NET和C#创立了一个称为TestSite的新网站(详见本文下载的源码);我增加了一个MasterPage和一个缺省页面。这个缺省页面中含有一个TextBox和一个Calendar控件;该TextBox控件有一个形貌泉币的双精度型实数。在本例中,我们会看到跟着用户选择分歧的言语泉币格局产生响应的变更。当我运转该使用程序时,此缺省页面看起来以下所示:
我已出书了这个测试web使用程序,你能够鄙人列URL处看到它的功效版本:http://63.134.215.124/testsite/default.aspx
<P> 4、文明和当地化
起首,让我先注释一下文明和当地化。
一样平常地,言语也依附于地舆地位。比方,法语既是法国人的言语也是加拿年夜人的言语(除此以外,另有别的很多国度也说法语)。可是从言语角度来说,加拿年夜法语分歧于法公法语。一样,在美国英语和英国英语之间也存在必定的区分。因而,言语经常必要与说该言语的特定区域相接洽,而且这是经由过程利用当地化(言语+地舆地位)完成的。
比方,fr是法语言语的代码,而fr-FR意味着法国利用的法语。因而,fr仅指定了这类言语,而fr-FR才完成了当地化。一样,fr-CA界说另外一个代表加拿年夜法语和文明的当地化。假如我们仅仅利用fr,那末它仅代表是一种中立性子的文明(也便是,区域中立)。
那末,我们怎样界说或改动以后文明呢?
在.NETFCL(框架类库)的CultureInfo类中存在两个属性,我们能够经由过程重载该类的机关器来对它们举行设置,然后利用它来改动以后实行线程的文明:
1.UICulture:获得/设置以后实行线程的用户接口。这个属性匡助运转时候从一个特定的资本文件(我们将在前面看到)中加载资本字符串。这个属功能够利用中立文明,也能够是当地化。比方:
Thread.CurrentThread.CurrentUICulture=newCultureInfo("fr");
或:
Thread.CurrentThread.CurrentUICulture=newCultureInfo("fr-CA");
2.Culture:获得/设置区域特定的文明和泉币、日期等的格局。这个属性必要言语也必要地位(当地化)。
Thread.CurrentThread.CurrentCulture=newCultureInfo("fr-A");//准确,由于我们已给出了当地化
Thread.CurrentThread.CurrentCulture=newCultureInfo("fr");//毛病,没法事情
偶然,我们必要一种不属于任何言语或当地化的文明,关于任何区域/言语都稳定。为此,我们可使用CultureInfo.InvariantCulture属性。这一属性在外部体系处置时代利用;此时,请求是文明自力的,大概存储不必要被间接显现给终端用户的数据。
UICulture和Culture属性都可以在Web.Config文件的<GLOBALIZATION>属性中举行界说。别的,它们还可以在页面级上被指定。可是,我们不想硬编码这些值而是喜好静态地设置它们。由下面可知,我们还可以利用Thread.CurrentThread.CurrentCulture和Thread.CurrentThread.CurrentUICulture属性以编码体例失掉/设置这些值。因而,我们将在本使用程序中利用这些属性。
5、当地化切换
如今,回到我们的使用程序中来,我们必要一种办法完成当地化切换。为此,存在两种办法:
1.利用扫瞄器设置:在IE中,用户能够经由过程利用"InternetOptions->General->Languages"来改动文明。为此,我们必要把Culture和UICulture都设置为auto而且把enableClientBasedCulture设置为true,以下所示:
<GLOBALIZATIONculture="auto"uiculture="auto"enableClientBasedCulture=""true""/>
2.用户指定的设置:我们可以向用户供应一个选项以便其在运转时候指定和改动文明和言语。这是保举的办法,由于偶然扫瞄器自己大概没有供应用户特定的言语集(比方一个法语旅游者大概在印度上彀)。并且,偶然经过扫瞄器修正言语设置将会被阻断。
如今,我们利用第二种保举的办法,我在MasterPage上部(在一个面板控件内)创立了一个节;此处,我利用了一个具有这些言语选项的下拉列表框以便让用户选择一种特定的当地化表达。
在本示例中,仅为了申明成绩,我仅利用了四种言语选项:
Hindi,AmericanEnglish,BritishEnglish和French。
为了完成我的使用程序的环球化,我的方针是:不管用户什么时候选择一种特定的当地化言语,以下都应当产生:
1.一切内容都应当是当地化的:这意味着,一切字符串和文本应当以选择的言语和当地化显现。
2.每一个控件的题目(/内容)也应当以当地言语显现文本。
3.日期和泉币格局化应当依据选择的当地化产生。
4.一切显现给用户的动静应当是利用当地的言语。
为了到达以上目标,你起首要确保从代码中掏出此内容并把它放在独自的资本文件中,在.NET中这是一些具有.resx扩大名的复杂的XML文件。
因为这些内容将因言语分歧而有所分歧,以是,我们针对每种文明(言语)各自创建了响应的资本文件。每个如许的文件中都供应了Name和Value两个域。上面是在两个资本文件中的示例出口;在此,假定我们必需输出一个字符串"Welcome":
1.增加一个新的资本文件并定名它为TestSiteResource.resx,而且利用VS编纂器翻开它。在Name域输出"Banner",在Value域输出"TestWebsiteforLocalization"。这个资本文件缺省利用的是美式英语。
2.增加另外一个资本文件并定名它为"TestSiteResources.fr-FR.resx"。这个文件响应于法语字符串。在Name域中增加"Banner",在Value域中增加"ExaminezlesiteWebpourlecomportementdelocalisation"。
假如你想增加加拿年夜法语资本,那末,你必要创立另外一个资本文件"TestSiteResources.fr-CA.resx"。这个名字的两头部分界说了当地化,而且它应当与经由过程UICulture属性指定的不异。
3.这些文件将被保留在ASP.NET2.0的App_GlobalResources文件夹下。
【提醒】假如你仅想在某些页面上显现当地化字符串,那末,经由过程把资本文件放到App_LocalDirectory文件夹下,你能够在全部使用程序中限定当地化举动。如许将使得当地化成为页面特定的,而不是全使用程序局限内的。这些定名应当以下所示(假定你仅想当地化一个名为MyPage.aspx的页面):
MyPage.aspx.resx:这是MyPage.aspx的缺省的资本文件。
MyPage.aspx.fr-FR.resx:当文明改动为French时,将利用它,可是仅仅使用程序中的MyPage.aspx被当地化。
一切下面的.resx文件将被编译到运转时候程序会合。这些程序集被称作"小程序集",而且为.resx文件供应了强范例包装器。因而,我们不必要忧虑在ASP.NET2.0中由我们本人来创立资本程序集的成绩。在你刊行你的网站后,这些程序集被放在/bin文件夹下的独自的文件夹中(名字为locale):
<P> 关于非ASP.NET使用程序,我们必要利用两个工具:
1.资本文件天生器(resgen.exe);
2.程序集链接器(al.exe)。
在MSDN中存在大批有关怎样利用这些工具的具体信息。有乐趣的读者能够找来看看。
如今,既然我们已针对分歧文明和言语创立了资本文件,那末接上去,当用户静态地改动文明时,我们必要一种办法来在运转时候加载它们。幸亏完成这一点在ASP.NET2.0中相称简单。请见上面的代码:
Stringwelcome=Resources.TestSiteResources.Welcome;
在这行代码中,我们利用了Resources定名空间,它是由ASP.NET主动创立的,这时候它把资本文件编译成"小"程序集而且我们利用与我们创立的资本文件名不异的TestSiteResources类。然后,我们存取Welcome属性,它将基于以后文明从资本文件中供应实践的文本。假如我们想失掉标签控件lblWelcome的文本,那末,我们可使用ASP.NET2.0中供应的两个办法来举行不异的设置:
1.隐式当地化:在此,我们指定在控件界说中的新的元标签而且让ASP.NET基于resourcekey属性从资本文件中获得该值:
<asp:Labelid=lblWelcomemeta:resourcekey="lblWelcome"Text="Welcome"
runat="server"></asp:Label>
为了使这可以事情,我们必要把页面特定的资本文件放到/App_LocalDirectory文件夹下。隐式当地化有助于减少全局资本文件的巨细而且有助于改善全局资本办理。当你有年夜部分页面特定的内容时,你可使用这类办法。
你不必要手工地做任何事变来设置这些隐式当地化属性。只需在计划体例下翻开你的web页面,然后转到"Tools->GenerateLocalResources"。这将为你的页面主动地创立一个资本文件。在VisualStudio2005资本文件编纂器中,你仅必要针对每个控件设置分歧的域值(Control.Property)。
2.显式当地化:当我们具有全局资本文件时利用这一手艺。在此,我们利用表达式来从资本文件中设置值,以下所示:
<asp:Labelid=lblWelcomeText="<%$Resources:TestSiteResources,Welcome%>"runat="server">
</asp:Label>
我们可以利用VSIDE完成这类设置。选择标签控件,转到其属性窗口,选择"Expressions->Text"。然后,从下拉框当选择"Resources"并输出类名(在这个示例中是,TestSiteResources)和Resource键(Banner)。这是当地化一个页面中的UI控件的保举体例。
<P>
3.以编程体例会见强范例化资本类,以下所示:
lblWelcome.Text=Resources.TestSiteResources.Welcome;
这类办法能够事情,可是它必要针对页面中的每个控件举行编码。因而,你能够对一切的控件利用第二种办法,并且利用这个办法来存取响应于别的内容的资本字符串(假如必要的话)。还应注重,象Calendar控件如许的控件都完成了内置的当地化功效。一旦以后线程的UICulture和Culture产生改动,它就会主动地显现当地化内容,这统统都回功于ASP.NET!完全不一样的。.net其实我也说不太清,.net可以把他理解为跟J2EE相对的工具。c++主要做系统相关的开发你要学.net的话就应该学C#。(其实微软在.NET平台上也考虑了给C++留一个地位。 ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 对于中小项目来说.net技术是完全可以胜任,但为什么现在大型公司或网站都选择php或java呢?就是因为微软不够开放,没有提供从硬件到应用服务器再到业务应用的整套解决方案。
页:
[1]