首先要在页面级别(<%@ Page UICulture="auto" Culture="auto" %>)或整个Portal级别(在Web.config中<globalization uiCulture="auto" culture="auto"/>)定义特定 UICulture
和 Culture
属性。这两个属性的值均为 auto。这将指示 ASP.NET 基于客户端浏览器的首选区域性为页的执行检测并设置当前线程区域性和 UI 区域性。如果不为auto则可以为其指定具体的语言。
如果需要从数据库中读取的信息作为选择语言的标准,需要对Thread.CurrentThread.CurrentCulture 和 Thread.CurrentThread.CurrentUICulture 进行更改,并且需要在 InitializeCulture()
方法中进行,因为对首选浏览器语言的自动检测是在页生存期的早期发生的。
可以通过后台代码或直接在页面上调用资源文件中的内容。
有两种形式的资源表达式:显式和隐式。
资源表达式形式 | 说明 |
---|---|
显式 | <%$ Resources:[filename prefix,]resource-key %> 显式表达式用于以声明性语法定义控件属性的值,resource-key(必需)用于映射到资源中的值。filename prefix 参数是可选的,filename 指定全局资源文件夹中的资源文件的名称。 |
隐式 | <asp:Label ID="Label1" runat="server" meta:resourcekey="resource-key-prefix" /> 隐式表达式以声明性语法用作控件或对象的属性,并且定义 resource-key-prefix,用于为控件执行许多属性分配。资源文件包含许多具有常规形式 resource-key-prefix.Property 的潜在资源键,例如 Label1KeyPrefix.Text 和 Label1KeyPrefix.Font-name。所有资源都只能从本地资源获取。可以将表达式看作一个短格式表示法,用于在未显式在页中定义属性的情况下映射一个到多个控件属性。 |
可以使用声明性语法将 ASP.NET 服务器控件属性值设置为资源值,也可以以编程方式检索资源值。如果在设计时资源值未知或者需要根据运行时条件设置资源值,可能会这样做。
可以从本地资源文件和全局资源文件中获取资源值,这些文件使用的方法返回一个可强制转换为适当类型的对象。由于 ASP.NET 使用强类型编译全局资源,因此也可以使用强类型成员获取全局资源。
调用 GetLocalResourceObject 或 GetGlobalResourceObject 方法以分别从全局资源文件或本地资源文件中读取特定的资源。在 HttpContext 和 TemplateControl 类中提供了这些重载方法。
GetGlobalResourceObject 方法采用资源类名和资源 ID。该类名基于的是 .resx 文件名。例如,文件 WebResources.resx 和所有相关联的本地化文件都由类名 WebResources 引用。
GetLocalResourceObject 方法采用表示 ResourceKey 属性的资源名。
下面的代码示例演示如何从本地资源文件和全局资源文件获取资源值。这些方法返回一个对象;因此,必须将该资源强制转换为适当的类型。
存储在 App_LocalResources 特殊文件夹中的默认本地资源文件根据 ASP.NET 页命名。例如,如果在 Default.aspx 页中使用了下面的代码,则必须将该资源文件命名为 Default.aspx.resx。在此示例中,向此文件添加了一个名为 Button1.Text 的字符串资源,并且该资源带有 "Found Resources" 值。
此外,在此示例中,存储在 App_GlobalResources 特殊文件夹中的默认全局资源文件命名为 WebResourcesGlobal.resx。向此文件添加了一个名为 LogoUrl 的字符串资源,而且该资源带有http://go.microsoft.com/fwlink/?LinkId=49295 值或其他图像的 URL
按照下面的语法获取资源:
Resources.Class.Resource
资源将编译到命名空间 Resources 中,并且每个默认资源都将成为 Resources 类的成员。例如,如果创建了默认资源文件 WebResources.resx,并且该文件包含一个名为 WelcomeText 的资源,则可以在代码中引用该资源,如下面的代码示例所示: