非常多种的类型,我们访问全局资源不需要考虑太多,比如说一个资源文件是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 codebutton1.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>