Partial Class _Default : Inherits LitwarePage ''*** 页面类定义位于此处 End Class
此时,我拥有一个可以跟踪用户语言首选项并可基于每个请求初始化区域性设置的网站。现在,我必须使用资源文件为 ASP.NET 2.0 网站本地化字符串文字,以便能够满足使用不同语言的用户的需求。
ASP.NET 2.0 中的资源文件
由于在默认情况下,Visual Studio? 2005 不使用项目来管理 ASP.NET 2.0 网站,所以将不会存在项目级别的资源文件,就像 Windows Forms 应用程序或类库 DLL 中那样。相反,您必须显式创建资源文件并将其添加到您的网站。而且,您还必须使用随 ASP.NET 2.0 引入的特殊文件夹:包含全局资源的资源文件应被添加到 App_GlobalResources 文件夹,而特定于某个文件的本地资源则应被添加到 App_LocalResources 文件夹。全局资源就是那些来自于页面及其他文件(如站点图)、可以在站点范围基础上使用的资源。支持本地资源的 ASP.NET 文件类型包含页(。aspx 文件)、母版页(。master 文件)和用户控件(。ascx 文件)。
不同于 ASP.NET 2.0 的另一点是,您不必像在开发国际化的 Windows Forms 应用程序时那样提前编译资源。相反,ASP.NET 运行时会准时将全局和本地资源文件编译到 DLL 中,就像 .aspx 文件那样。这是一种强大的功能,因为公司只需将 .resx 文件 XCOPY 到一个 Web 生产服务器上,即可为新语言添加本地化支持。
让我们在使用 Visual Studio 2005 的 ASP.NET 2.0 站点中,来完成一个创建和使用全局资源文件的示例。您可以先选择 Add New Item(添加新项)命令,然后再选择 Resource File(资源文件),来创建一个新的全局资源文件。
当您单击 Add(添加)按钮创建一个新的全局资源文件时,Visual Studio 2005 会用一个对话框对您进行提示,建议您将新的资源文件放置在 App_GlobalResources 目录内。单击 Yes(是)。如果您将其置于他处,则 ASP.NET 便不会将资源文件自动编译到 DLL 中。
在 ASP.NET 中使用资源文件与在 Windows Forms 应用程序中相同。首先创建一个资源文件,其字符串文字已本地化为默认区域性设置。在我们的示例网站中,有一个用于该目的的全局资源文件,该文件的名称为 Litware.resx,如图 4 所示。在您添加了所有采用默认区域性设置的指定字符串后,即可复制该资源文件并将其重命名,例如重命名为 Litware.fr.resx 以提供法语的本地化字符串。您还可以复制该法语资源文件并将其重命名为 Litware.fr-BE.resx,以维护已局部本地化为比利时法语的字符串。
图 4 本地化资源
在资源文件中添加和维护指定字符串非常容易,因为 Visual Studio 2005 提供了方便易用的资源编辑器,如图 5 所示。请记住,资源文件并不仅限于本地化字符串。您可以添加其他类型的资源,如图像文件、级联样式表和客户端 JavaScript 文件。
图 5 Visual Studio 2005 资源编辑器
现在,我们来创建从全局资源文件检索指定字符串的页面。这做起来非常容易,就像是在开发一个国际化的 Windows Forms 应用程序时,无需直接对 .NET 提供的 ResourceManager 类进行编程。因为 ASP.NET 和 Visual Studio 2005 可以在后台为每个全局资源文件生成一个强类型化资源类,并通过 IntelliSense? 使其变为可用。
请注意,Visual Studio 2005 可以在设计视图编辑器中打开页、用户控件或母版页时,在 Tools(工具)菜单中提供一个名为 Generate Local Resource(生成本地资源)的方便易用的命令。该命令可自动创建默认区域性的本地资源文件。还可在页面中添加 meta:resourcekey 属性,并在本地资源文件中创建相应的字符串值,来充当 meta:resourcekey 属性项目的目标。
最后,请注意:有一个名为 Localize(本地化)控件的 ASP.NET 2.0 新组件,可以使您本地化 .aspx 页上的任何元素。它提供一种不由其基类提供的设计时间功能:Literal(文字)控件;尤其是,Localize(本地化)控件提供了静态内容的设计时间编辑,以便您能够在页面设计模式下工作时查看默认值。
在 DLL 项目中嵌入资源
我将暂时撇开国际化和本地化主题,先讨论一种在类库 DLL 中使用嵌入资源的新 ASP.NET 技术。该技术允许您在 DLL 中嵌入图像文件、级联样式表文件和 JavaScript 文件,并通过 DLL 在托管 Web 服务器上加以提供。
请注意,该技术需要使用一个面向 ASP.NET 2.0 网站的类库 DLL.这一新功能是由 ASP.NET 团队特别添加的,目的是为服务器端的控件创建者提供一种更好的方式,使他们可以在分配自定义控件和 Web 部件的同时分配资源文件。不必将资源文件与 DLL 一起分配,也不必确保他们被复制到托管 Web 服务器上一个可访问的路径,资源文件现在可以在 DLL 内自行分配,并可通过运行时由 ASP.NET 生成的 URL 加以提供。