摘要:
由于越来越多的跨国公司需要跨语言的WEB应用,所以本地化工作变得尤其重要,在ASP.NET 1.1 中我们使用ResourceManager 类来实现这个工作,而2.0中提供了更加方便的方法和工具来实现
导言:
现在很多跨国的商务需求都需要实现多语言,对客户来说他们始终想看到网站是用他们所熟悉的语言来显示的,他们不会关注网站使用的是什么技术,而现在的开发工具或者开发技术并没有在本地化方面做的很好,我们还需要花大量的时间和精力去做本地化的工作。ASP.NET2.0的出现大大简化了这个过程,配合VS.NET2005新的特性,我们可以很方便得来自动剥离网站的语言元素,很容易去实现多版本网站,而且许多针对本地化的API同样也可以方便得帮助我们完成这个过程
.NET 1.1中的本地化:
在1.1中我们使用
ResourceManager来实现这个过程,或许对于WINFORM来说这个过程还比较简单,但是VS.NET2003并没有给我们WEBFORM下的本地化工作带来什么自动化,我们还需要花很多精力在重复复制代码上,点击这里查看1.1的实现方法。
.NET 2.0 中的本地化:
2.0中的本地化还是基于1.1的,但是却提供了很多自动化工作:
1、自动生成页面资源文件
2、方便的编程实现资源文件的访问
3、自动为页面装载合适的语言
4、控件和资源文件自动匹配
5、强类型的资源文件
6、资源文件编辑器
7、资源文件使用表达式
8、资源Provider模型
本地资源文件实现:
VS.NET 2005 菜单-Tools-Generate Local Resource,所产生的资源文件将会放在\App_LocalResources下面
可以看到,只有TEST和TOOLTIP这些涉及到语言的属性被加入了资源文件
再切换回视图状态可以看到一些属性右边有红色标记,这表明这个属性绑定的是本地资源,通常这些都是IDE自动为你做的,再看看上面的AlternateText后面有一个蓝色标记,这表示这个资源是全局的资源
全局资源的实现:
在我们的项目中通常有很多重复的东西,比如MasterPage,用户控件,菜单,甚至还有一些提示信息等这些东西如果包含在多个页面,我们每次都需要重复制作他们的资源文件,这非常不科学,所以我们要手动的来制定全局资源。这个时候先要建立一个
\App_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的表达式对话框直接来选择
用程序读取方式如下:
ImageButton button1 = new ImageButton();
// other initialization code
button1.ID = "btnIDesign";
button1.AccessKey = (string)
base.GetLocalResourceObject("ImageButtonResource1.AccessKey");
button1.AlternateText = (string) base.GetGlobalResourceObject("Glossary",
"MissionStatement");
button1.ImageUrl = (string)
base.GetLocalResourceObject("ImageButtonResource1.ImageUrl");
button1.ToolTip = (string)
base.GetLocalResourceObject("ImageButtonResource1.ToolTip");
button1.Visible = (bool)
base.GetLocalResourceObject("ImageButtonResource1.Visible",
typeof(Control), "Visible");
本地化HTML控件和文本:
Html控件:html控件不能用前面说的两种表达式来指定资源,除非是让它runat=server,不过对于页面的title比较特殊,它也会作为页面的一个对象自动生成本地资源
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" meta:resourcekey="PageResource1" %>
不过,我们也可以为它制定全局资源
<head runat="server">
<title><asp:Literal Text='<% $ Resources: Glossary, DefaultPageTitle %>' runat="server"></asp:Literal></title>
</head>
本地化文本:
对于项目中很多静态的文本,我们可以使用Localize控件来包含这些文字,其实这个控件和Literal相似,但是它能在设计模式下随意修改里面的文字内容,看下怎么访问本地资源和全局资源
<asp:Localize id="welcomeContent" runat="server"
meta:resourcekey="welcome">Welcome!</asp:Localize>
<asp:Localize id="welcomeContent" runat="server" text='<%$ resources: Glossary,
welcomeText%>'>Welcome!</asp:Localize>
多语言实现:
从默认的资源文件复制一个新的的资源文件,只要在resx前面加上地区代号,逐项编辑即可,如下设置后浏览器会自动根据设置(工具-选项-语言)调用新的资源文件
<%@ Page UICulture="auto" Culture="auto">
当然你也可以通过web.config文件指定一种语言
<system.web>
<globalization culture="es-ES" uiCulture="es">
</system.web>
分享到:
相关推荐
VS2005 ASP.NET本地化学习笔记&感受 在自定义Server Control中捆绑JS文件 Step by Step 深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
ASP.NET 2.0提供了一些新的用于提升程序性能的技术特性,其中,缓存技术是非常重要的一个特性,它提供了一种非常好的本地数据缓存机制,可以非常容易的定制属于数据缓从,从而有效的提高数据访问的性能。 • 开始...
6.1.2 自定义错误提示消息及其本地化 121 6.1.3 注解的后台原理 122 6.1.4 控制器操作和验证错误 123 6.2 自定义验证逻辑 125 6.2.1 自定义注解 125 6.2.2 ivalidatableobject 128 6.3 显示和编辑注解 129 ...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
与此同时,作者添加了大量新内容,涵盖ASP.NET 3.5引入的所有新特性,包括使用LINQ to SQL更轻松地构建数据驱动的网站,使用新的数据访问控件ListView和DataPager开发更加灵活的用户体验,以及整整三章全面剖析 ASP...
第一部分 构建ASP.NET页面 第1章 ASP.NET Framework概览 2 1.1 ASP.NET和.NET Framework 5 1.1.1 框架类库 5 1.1.2 公共语言运行库 9 1.2 ASP.NET控件 10 1.2.1 ASP.NET控件概览 11 1.2.2 HTML控件 12 1.2.3 理解...
asp.net 4揭秘.第1卷》 第一部分 构建asp.net页面 第1章 asp.net framework概览2 1.1 asp.net和.net framework5 1.1.1 框架类库5 1.1.2 公共语言运行库10 1.2 asp.net控件11 1.2.1 asp.net控件概览11 1.2.2 html控件...
q designer.cs页文件:用来为页面的控件做初始化工作,一般只有ASP.NET应用程序(Web Application)才有。 ASP.NET页面中包含两种代码模型,一种是单文件页模型,另一种是代码隐藏页模型。这两个模型的功能完全一样...
卷2是高级篇,主要介绍了ASP.NET的安全性,缓存、状态维护、本地化等构建各种ASP.NET应用程序时所需的关键实用技术,自定义控件的构建以及ASP.NET AJAX技术等。本书广受读者称道,除了文字叙述清晰透彻之外,代码...
内容简介回到顶部↑本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合...
原名为 BlogEngine.NET,是由 BlogYi.net 从英文官方 www.dotnetblogengine.net 获得项目并对其本地化修改而完成的。 新一代的博客成熟的系统架构方便的内容导入导出先进的评论体系无须数据库且支持多种数据库独立...
本书全面介绍了ASP.NET各种编程技能和2.0版中的巨大变化,并详细阐述了2.0版中的每个新特性。书中提供了大量的实例,可帮助读者快速掌握如何在.NET平台下开发功能强大的ASP.NET应用程序。本书适合有一些基础的ASP...
课程简介:ASP.NET 2.0 除了编译模型的改进之外,针对页面生命周期也公开了新的事件来支持新功能,例如母版页、个性化以及集成的设备支持等。增强的缓存功能,以及扩展性支持,本课程主要对以上几个方面进行阐述。...
使用 ASP.NET Core 创建多语言网站,可让网站拥有更...下面这篇文章主要给大家介绍了关于ASP.NET Core自定义本地化教程之从文本文件读取本地化字符串的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
课程简介:ASP.NET 2.0 除了编译模型的改进之外,针对页面生命周期也公开了新的事件来支持新功能,例如母版页、个性化以及集成的设备支持等。增强的缓存功能,以及扩展性支持,本课程主要对以上几个方面进行阐述。...