在 ASP.NET 页面中,你可以使用下列方法来获取被 ASP.NET 编译并且被 .NET Framework 资源管理器所管理的资源文件中的值:
- 隐式的本地化,ASP.NET 从基于与控件属性的资源关键字相匹配的资源管理器中填充属性值。
- 明确地本地化,创建一个从 .NET Framework 资源管理器中获取特定资源的表达式。
- 编程,在代码中获取资源的值。
关于详细信息,请参考:[实践:通过编程来获取资源的值]。
使用隐式的本地化
- 确保你拥有符合下列标准的局部资源文件(.resx 文件):
- 它们位于 App_LocalResources 目录中。
- 基本名称与页面名称相匹配。
例如,如果你正在操作名为 Default.aspx 的页面,那么资源文件就应该被命名为 Default.aspx.resx(默认的资源)、Default.aspx.es.resx、Default.aspx.es-mx.resx,等等。
- 文件中的资源使用了命名约定 resourcekey."property"。
例如,关键字名称 Button1."Text"。
- 在控件的标记中,添加一个隐式的本地化特性。
例如:
<asp:Button ID="Button1" runat="server" Text="DefaultText" meta:resourcekey="Button1" />
所有的资源文件都是被编译的,并且 .NET Framework 资源管理器通过 ASP.NET 而被用来在运行时获取默认资源文件中每种资源的适当的文化资源。关于每种资源,ASP.NET 会在页面中寻找相应的 resourcekey."property" 联合(类似于前面范例中的 resourcekey="Button1"),然后把已获取的值替代成资源。
使用明确的本地化
- 在控件的标记中,使用资源表达式来为每个你需要替换成资源的属性而设置值。表达式的语法如下所示:
<%$ Resources:Class, ResourceKey %>
使用这些值:
- Class 是基于 resx 文件名的资源文件类。
一个被命名为 WebResources.resx 的资源文件所使用的类名称应该是 WebResources。而所有的文化变量资源文件都会使用相同的类名称来作为文化中立的资源文件。如果你需要从与页面相关联的局部资源文件中获取资源,那么 Class 就是可选的。
- ResourceKey 是已指定类的资源名称。
例如,一个被配置成从全局资源文件中设置 Text 属性的 Button 控件将会与下列代码范例相似:
<asp:Button ID="Button1" runat="server" Text="<%$ Resources:WebResources, Button1Caption %>" />
- Class 是基于 resx 文件名的资源文件类。
范例
下列代码范例分别说明了隐式的本地化和明确的本地化。第一个代码范例说明了如何使用隐式的本地化,这发生在每个被标记了元特性的控件中。并且在运行时,ASP.NET 会把资源匹配到控件的属性。而第二个代码范例则说明了一个使用资源表达式(明确的本地化)来设置若干控件的 Text 属性值以及一个 Image 控件的 ImageUrl 属性值的页面。
在第一个范例中,把第一行中的 <default> 改成一个有效的文化名称。关于文化名称的列表,请参考:[CultrueInfo] 中的 "文化名称和标识符" 部分。
<%@ Page Language="C#" Culture"auto:<default>" meta:resourcekey="PageResource1" UICulture="auto" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Implicit Localization Sample</title> </head> <body> <form id="form1" runat="server"> <div> <h1> <asp:Localize runat=server ID="WelcomeMessage" Text="Welcome!" meta:resourcekey="Literal1" /> </h1> <p> <asp:Image runat="server" ID="Logo" ImageUrl="" meta:resourcekey="Logo" /> </p> <br /> <br /> <asp:Localize runat="server" ID="NameCaption" Text="Name: " meta:resourcekey="Literal2" /> <asp:TextBox runat="server" ID="TextBox1" meta:resourcekey="TextBox1" /> <br /> <br /> <asp:Button ID="Button1" runat="server" Text="Submit" meta:resourcekey="Button1"/><br /> </div> </form> </body> </html>
<%@ Page Language="C#" UICulture="auto" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Explicit Localization Sample</title> </head> <body> <form id="form1" runat="server"> <div> <h1> <asp:localize runat="server" Text="<%$ Resources:WebResources, WelcomeMessage %>" /> </h1> <asp:Image runat="server" id="Logo" ImageUrl="<%$ Resources:WebResources, LogoUrl %>" /> <p> <asp:Localize runat="server" Text="<%$ Resources:WebResources, EnterNameCaption %>" /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> <br /> <asp:Button ID="Button1" runat="server" Text="<%$ Resources:WebResources, SubmitButtonCaption %>" /> </p> </div> </form> </body> </html>
在 @ 页面指令中,UICultrue 特性被设置成是自动指定的,并且页面应该把当前的 UI 文化设置成通过浏览器而传递的信息。
在 Web 页面中,资源(比如图片)都是通过使用一个 URL 来引用一个外部文件的方式而被包括的。通常,你需要通过创建不同版本的图片来本地化图片和其他资源。然后你就可以通过把字符串资源指定成适当路径的资源表达式的方式来设置控件的 URL。