在ASP.NET 2.0开发中实现站点地图的本地化

简介:
一、基于XML的站点地图
以前在Web应用程序中建立导航的方法是在页面上散布大量的超级链接。但当开发大型Web工程时,这种简单而原始的方法显得极为臃肿而且力不从心。 为此,ASP.NET 2.0引入了一个新的导航系统来解决整个问题。尽管ASP.NET中的这个新功能非常复杂,但是我们可以从其提供的大量方法属性对之进行全面控制。
这种新的导航系统通过一个XML文件来定义整个站点的导航系统;为此,该XML文件称为“站点地图”。在本文中,我们想略过有关这种基于XML的站 点地图的基本讨论(注:本文提供了两个示例工程,其中之一即是有关基于XML显示站点地图),而专注于讨论这种新的站点导航机制的本地化问题,并提供一个 简单但完整的示例工程。
通过修改资源文件(.resx)来实现系统的本地化,是实现从桌面应用到ASP.NET应用程序开发的本地化的一种好方法。下面,我们将详细讨论这种方法。
二、为本地化构建站点地图—Web.sitemap文件
可以把本地化指令应用于ASP.NET Web应用程序的页面上,也可以使用相同的思路在Web.sitemap文件中完成本地化任务。
右击“解决方案资源管理器→添加新项…”,在随后的“添加新项”对话框中点选“站点地图”模板,如下图所示:
 
1. 通过点选“站点地图”模板创建站点地图文件
为此,我们应该先构建一个 Web.sitemap 文件,请见下面的程序清单:
 
    
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns=" [url]http://schemas.microsoft.com/AspNet/SiteMap-File-1.0[/url]"
enableLocalization="true">
<siteMapNode title="Home" description="Home" url="~/default.aspx" resourceKey="Home">
<siteMapNode title="Products" description="Our products"
url="~/Products.aspx" resourceKey="Products">
<siteMapNode title="Hardware" description="Hardware choices"
url="~/Hardware.aspx"  resourceKey="Hardware"/>
<siteMapNode title="Software" description="Software choices"
url="~/Software.aspx"  resourceKey="Software"/>
</siteMapNode>
<siteMapNode title="Services" description="Services we offer"
url="~/Services.aspx" resourceKey="Services">
<siteMapNode title="Training" description="Training classes"
url="~/Training.aspx"  resourceKey="Training"/>
<siteMapNode title="Consulting" description="Consulting services"
url="~/Consulting.aspx"  resourceKey="Consulting"/>
<siteMapNode title="Support" description="Supports plans"
url="~/Support.aspx"  resourceKey="Support"/>
</siteMapNode>
</siteMapNode>
</siteMap>
这是一个相当简单的Web.sitemap文件。
【注意】尽管Web.sitemap文件可以引用其他站点地图提供程序或其他目录中的其他站点地图文件以及同一应用程序中的其他站点地图文件,但该文件必须位于应用程序的根目录中。
实现自定义的站点地图提供程序时,如果存储站点地图数据的文件的扩展名不是.sitemap,就会有潜在的安全风险。默认情况下,会将 ASP.NET配置为阻止客户端下载具有已知文件扩展名(如.sitemap)的文件。为帮助保护您的数据,可将文件扩展名不是.sitemap的所有自 定义站点地图数据文件放入App_Data文件夹中。
【注意】为了在Web.sitemap文件中支持本地化功能,必须使用元素中的enableLocalization属性—把它设置为true,以启动这项功能。接下来,你就可以使用元 素定义每个导航节点了。但在本文示例中,由于我们要通过各个独立的.resx文件来定义这些导航部分的内容(尤其是title和descriptioon 属性),所以我们不需要在这个文件中重复定义这些项。所以在此文件内,我们只需要定义url属性。但要注意,你还可以通过.resx文件来定义这个属性, 从而根据终端用户定义的文件设置,把他们定向到不同的页面上。
另一个要注意的属性是元素中使用的resourceKey,它是各个.resx文件中使用和定义的键。以下面的元素为例:
 
    
<siteMapNode url=”News.aspx” resourceKey=”News”>
…………
</siteMapNode>
在这个例子中,resourceKey的值(和.resx文件中使用的键)都是News。这表示可以使用下面的语法在.resx文件中定义title和description属性的值:
 
    
News.Title
News.Description
至此,我们已经准备好站点地图文件Web.sitemap。接下来,我们要对ASP.NET 2.0配置文件Web.config进行一些小小的修改。
三、修改文件Web.config
为了让Web应用程序自动检测和查看各个页面的用户所使用的文件设置,我们需要在文件的@Page指令中设置Culture和UICulture属性,或者在Web.config文件中的元素中设置这些属性,以支持自动检测。
【提示】在处理导航和Web.sitemap文件时,最好在Web.config文件中进行这些修改,使它们在应用程序的每个项目上自动发挥作用。这么做也比较简单,因为不需要给每个页面添加这些修改。
要进行这样的修改,只需打开Web.config文件并添加一个元素,如下面的清单所示。
 
    
<configuration>
<system>
<globalization culture=”auto” uiCulture=”auto” />
<system>
<configuration>
为了支持自动检测功能,只需把culture和uiCulture属性设置为auto。还可以把其值定义为auto:en-US,它表示支持自动化 检测功能,但如果所定义的文件在各个资源文件中未找到,就把en-US用作默认文件。但在本例中,因为我们要定义一组Web.sitemap默认值,所以 不需要进行这样做。
接下来,我们需要创建程序集资源文件,以定义Web.sitemap文件使用的值。
四、创建程序集资源文件
要创建一组用于Web.sitemap文件的程序集资源文件,应在项目中创建一个文件夹App_GlobalResources。
【提示】如果你使用的是Visual Studio 2005,则只需要右击项目,然后选择“Add Folder→App_GlobalResources.Folder”即可添加这个文件夹。
添加了App_GlobalResources文件夹后,下一步是给这个文件夹添加两个程序集资源文件:第一个文件命名为 Web.sitemap.resx;第二个文件命名为Web.sitemap.en.resx。其中,Web.sitemap.resx文件包含一组在 Web.sitemap.resx文件中定义的用于Web.sitemap文件中的默认值,而Web.sitemap.en.resx文件包含了相应于这 些值的英语版本。
文件名中有en值,表示该文件由把首选语言设置为en-EN的用户使用。这些设置的其它值如表所示。
.resx 文件

对应的文件

Web.sitemap.resx

如果终端用户的文件不能通过另一个.resx文件来识别,则使用默认值

Web.sitemap.en.resx

用于所有英语用户的资源文件

Web.sitemap.en-gb.resx

用于所有英国英语用户的资源文件

Web.sitemap.fr-ca.resx

用于所有加拿大法语用户的资源文件

Web.sitemap.ru.resx

用于所有俄语用户的资源文件

 
有了Web.sitemap.resx文件和Web.sitemap.en.resx文件之后,下面就是给这些文件相应的属性值赋予特定的文化值。为此,我们使用前面在Web.sitemap文件中定义的键,如下图2所示。
 
 
 
图2.中文站点资源文件(Web.sitemap.resx)相应的键定义
 
 
图3.英文站点资源文件(Web.sitemap.en.resx)相应的键定义
 
有了这些文件后,我们就可以进行本地化测试。
 
五、本地化测试
 
在VS2005新建一个ASP.NET网站项目,然后把一个TreeView服务器控件拖动到默认Web页面 (Default.aspx)上。除了这个TreeView控件之外,还要放置一个SiteMapDataSource控件,以配合前面所创建的 Web.sitemap文件之用。然后,设置TreeView控件的属性DataSourceID为SiteMapDataSource1—这样以来,可 以将这两个控件关联起来。
 
在浏览器中一打开这个页面时,它就会检查请求的首选文化。由于本例中定义的设置是用于使用简体中文的用户,所以使用默认的Web.sitemap.resx文件。于是,系统使用Web.sitemap.resx文件填充TreeView控件的值,如下图所示。
 
 
 
图4.使用简体中文语言时的站点地图显示内容
 
如果用户把文化设置为en(英语),就会得到完全不同的结果。为此,打开IE菜单“工具→Internet选项→常规→语言→语言首选项”,然后单击‘添加’按钮,在选项列表中添加‘en’语言设置。
 
注意,因为IE自动使用优先级方法确定显示网页语言;所以,添加该语言后,你还需要使用“上移”按钮,把新添加的语言置到最上面,见下图。
 
 
 
图5.添加英语语言并置之为最优先的文化选择

点击“确定”退出对话框,刷新IE页面,则结果将如下图所示:
 
 
 
图6.使用英语语言时的站点地图显示内容
 
现在,请求页面时,文件设置为en,对应于站点资源文件Web.sitemap.en.resx,而不是默认的Web.sitemap.resx文件。
【调试问题】在调试过程中,我发现当点击上面树控件中的‘折叠’(或‘展开’)按钮时,出现下图中所示异常显示(对于中文也是如此):
 
 
 
图7.IE显示异常
 
但到目前为止,本文尚未找到相应的解决办法。如有找到此答案者,请不吝赐教。
 
六、小结
 
本文中,我们首先简要地介绍了ASP.NET 2.0提供的新的站点导航机制,并注意到这个新的导航功能的核心是通过XML文件来详细描述网站的导航框架。显然,这种新导航机制的强大功能可以大大节省 程序员的编码时间。接下来,我们通过一个简单的例子分析了本地化Web.sitemap的一般思路。











本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/59824  ,如需转载请自行联系原作者



相关文章
|
4天前
|
人工智能 量子技术 C#
【专栏】.NET 开发:开启数字化新时代
【4月更文挑战第29天】.NET开发在数字化新时代中发挥关键作用,借助跨平台能力、高性能和现代编程语言支持,如C#,助力企业实现数字化转型。通过企业级应用开发、移动应用和云计算集成,.NET加速业务流程和提升用户体验。未来,.NET将涉足AI、ML、MR/AR及量子计算,持续推动技术创新和数字化转型。开发者应提升技能,适应高性能需求,把握发展机遇。
|
4天前
|
缓存 监控 算法
【专栏】.NET 开发:实现卓越性能的途径
【4月更文挑战第29天】本文探讨了.NET开发中的性能优化,强调了理解性能问题根源和使用分析工具的重要性。基础优化包括代码优化(如减少计算、避免内存泄漏)、资源管理及选择合适算法。高级策略涉及并行编程、缓存策略、预编译(AOT)和微服务架构。持续性能测试与监控是关键,包括性能测试、监控分析和建立优化反馈循环。开发者应持续学习和实践性能优化,以构建高性能应用。
|
4天前
|
开发框架 .NET C#
【专栏】理解.NET 技术,提升开发水平
【4月更文挑战第29天】本文介绍了.NET技术的核心概念和应用,包括其跨平台能力、性能优化、现代编程语言支持及Web开发等特性。文章强调了深入学习.NET技术、关注社区动态、实践经验及学习现代编程理念对提升开发水平的重要性。通过这些,开发者能更好地利用.NET构建高效、可维护的多平台应用。
|
4天前
|
机器学习/深度学习 vr&ar 开发者
【专栏】.NET 技术:引领开发新方向
【4月更文挑战第29天】本文探讨了.NET技术如何引领软件开发新方向,主要体现在三方面:1) 作为跨平台开发的先锋,.NET Core支持多操作系统和移动设备,借助.NET MAUI创建统一UI,适应物联网需求;2) 提升性能和开发者生产力,采用先进技术和优化策略,同时更新C#语言特性,提高代码效率和可维护性;3) 支持现代化应用架构,包括微服务、容器化,集成Kubernetes和ASP.NET Core,保障安全性。此外,.NET还不断探索AI、ML和AR/VR技术,为软件开发带来更多创新可能。
|
4天前
|
物联网 vr&ar 开发者
【专栏】.NET 技术:为开发注入活力
【4月更文挑战第29天】本文探讨了.NET技术的创新,主要体现在三个方面:1) .NET Core实现跨平台开发革命,支持多种操作系统和硬件,如.NET MAUI用于多平台UI;2) 性能提升与生产力飞跃,C#新特性简化编程,JIT和AOT优化提升性能,Roslyn提供代码分析工具;3) 引领现代化应用架构,支持微服务、容器化,内置安全机制。未来,.NET 7将带来更多新特性和前沿技术整合,如量子计算、AI,持续推动软件开发创新。开发者掌握.NET技术将赢得竞争优势。
|
4天前
|
人工智能 前端开发 Cloud Native
【专栏】洞察.NET 技术的开发趋势
【4月更文挑战第29天】本文探讨了.NET技术的三大发展趋势:1) 跨平台与云原生技术融合,通过.NET Core支持轻量级、高性能应用,适应云计算和微服务;2) 人工智能与机器学习的集成,如ML.NET框架,使开发者能用C#构建AI模型;3) 引入现代化前端开发技术,如Blazor,实现前后端一致性。随着.NET 8等新版本的发布,期待更多创新技术如量子计算、AR/VR的融合,.NET将持续推动软件开发的创新与进步。
|
4天前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
4天前
|
人工智能 前端开发 Devops
【专栏】洞察.NET 技术在现代开发中的作用
【4月更文挑战第29天】本文探讨了.NET技术在现代软件开发中的核心价值、应用及挑战。.NET提供语言统一性与多样性,强大的Visual Studio工具,丰富的类库,跨平台能力及活跃的开发者社区。实际应用包括企业级应用、Web、移动、云服务和游戏开发。未来面临性能优化、容器化、AI集成等挑战,需持续创新。开发者应深入理解.NET,把握技术趋势,参与社区,共创美好未来。
|
4天前
|
机器学习/深度学习 人工智能 开发者
【专栏】.NET 技术:为开发带来新机遇
【4月更文挑战第29天】本文探讨了.NET技术如何为软件开发带来新机遇,分为三个部分:首先,.NET的跨平台革命,包括.NET Core的兴起、Xamarin与.NET MAUI的移动应用开发、开源社区的推动及性能优化;其次,介绍了云服务与微服务架构的集成,如Azure云服务、微服务支持、DevOps与CI/CD,以及Docker容器化;最后,讨论了AI与机器学习集成,如ML.NET、认知服务、TensorFlow和ONNX,使开发者能构建智能应用。面对这些机遇,开发者应不断学习和适应新技术,以创造更多价值。
|
4天前
|
算法 Java 编译器
【专栏】.NET 开发:实现高效能的秘诀
【4月更文挑战第29天】本文探讨了提升.NET应用性能的三个方面:理解.NET运行时(垃圾回收、JIT编译器、异步编程和线程并发)、优化代码与算法(代码细节、数据结构选择和算法效率)以及利用工具和框架(性能分析工具、高性能库和CI/CD流程)。通过深入学习、合理设计和有效工具,开发者可实现.NET应用的高效能。

相关实验场景

更多