By Guy Smith-Ferrier
本文讨论:
|
本文使用了以下技术: ASP.NET AJAX |
目录
事实上,ASP.NET 2.0 为 Web 应用程序提供了出色的本地化模型,而且在 Microsoft® .NET Framework 中也包括了大量的全球化支持。但是,这种支持仅限于服务器端代码。ASP.NET AJAX 应用程序包括大量的客户端代码,而标准的 ASP.NET 本地化模型并不包括这些内容。在这里,我将对 ASP.NET AJAX 应用程序的本地化和全球化模型进行介绍,并演示如何本地化 JavaScript 资源和增加有限的全球化支持。并且我假设您对 ASP.NET 和 ASP.NET AJAX 以及国际化 ASP.NET 2.0 应用程序都有基本的了解。
基于程序集的本地化模型
Microsoft ASP.NET AJAX 框架包括两个可用于本地化 JavaScript 资源的模型:一个是基于程序集的,另一个是基于文件的。我们首先来了解基于程序集的模型。
基于程序集的模型将使用您在任何 ASP.NET 或 Windows® Forms 应用程序中使用的资源,即常规的 .NET Framework .resx 文件。这些资源都嵌入在程序集中,最终使用 ResourceManager 类进行检索。我将通过一个示例来解释这个过程:一个可调用 JavaScript 函数的按钮,该函数用警告的方式向用户显示一个可本地化的消息。如果打算同步进行,并自己创建示例,不妨使用这里指定的名称;否则,当您的示例无法得出正确结果时,将很难找到问题的根源。
首先,我们将创建一个启用了 AJAX 的 Web 应用程序项目(“文件”|“新建”|“项目”|“启用了 ASP.NET AJAX 的 Web 应用程序”)。请注意,您需要将 Visual Studio® 2005 SP1 用作此项目的模板(不能使用 AJAX 网站项目作为该示例的替代,因为无法对生成程序集进行确切的访问)。调用项目 AJAXEnabledWebApplicationI18N1(I18N 是“Internationalization”的缩写,因为“Internationalization”以“I”开头,中间有 18 个字母,末尾字母为“N”)。向窗体中添加一个按钮,然后再添加一个 OnClientClick 事件,就可以调用名为 displayAlert 的 JavaScript 函数:
<asp:Button ID="Button1" runat="server" OnClientClick="return displayAlert();" Text="Button"/>
现在,添加一个名为 DisplayFunctions.js 的 JScript 文件,如下所示:
function displayAlert()
{
window.alert(DisplayFunctionsResources.Greeting);
return false;
}
{
window.alert(DisplayFunctionsResources.Greeting);
return false;
}
displayAlert 函数使用 window.alert 显示 DisplayFunctionsResources.Greeting。请注意,DisplayFunctionsResources.Greeting 尚不存在,但这是可本地化的资源,我引用它就好像它是一个强类型化的资源类。我将在稍后讨论这一想法。使用“属性”窗口将 DisplayFunctions.js 文件的“生成操作”设为“嵌入的资源”。此操作即是告知编译器将 DisplayFunctions.js 作为资源嵌入到生成的 AJAXEnabledWebApplicationI18N1.dll 程序集中。
接下来,我们希望用户能够轻松地设置 Web 应用程序所使用的区域,所以将 Culture(区域性)和 UICulture 属性添加到页面页眉中,并将它们设置为 auto。当然,如果您使用“工具”|“生成本地资源”,将会自动添加这些页面属性,就像在本地化一个 ASP.NET 程序时所做的那样;但是在本示例中,我将手动添加,因为我想澄清一点,即 ASP.NET AJAX 的本地化模型并不要求您也使用 ASP.NET 的本地化模型。
现在添加一个资源文件,将其命名为 DisplayFunctionsResources.resx。再添加一个名为 Greeting 的资源条目,并且赋值为“Hello World”。现在,您应该能够了解 DisplayFunctions.js 中 DisplayFunctionsResources.Greeting 的含义了。现在添加一个名为 DisplayFunctionsResources.fr.resx 的资源文件,再添加一个名为 Greeting 的资源条目,赋值为“Bonjour Le Monde”。该资源文件在 .resx 文件扩展名之前使用了标准的包括区域名(此处 fr 表示法国)的 .NET Framework .resx 文件命名约定。
我稍后将会解释它是如何工作的,但是在这之前,您只需相信我就对了。现在,您需要了解的是:可通过使用 WebResource 和 ScriptResource HTTP 处理程序将 Web 应用程序中的资源(DisplayFunctions.js、DisplayFunctionsResources.resx 和 DisplayFunctionsResources.fr.resx)用于页面。这些处理程序不会自动使所有资源可用;相反,它们将查找程序集属性,这些属性标记允许公开的资源。打开项目的 AssemblyInfo.cs 文件,并将这些程序集属性添加到该文件:
若要向页面公开这些资源,您需要将 ASP.NET AJAX ScriptManager 添加到该页面,并对其进行配置以生成指向可本地化资源的链接。可通过将 ScriptManager 的 EnableScriptLocalization 属性设置为 True 来完成此操作。此外,您还需要指出将 ScriptReference 添加到 ScriptManager 后页面可引用哪些资源。完整的 ScriptManager 元素如下所示:
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnableScriptLocalization="true">
<Scripts>
<asp:ScriptReference
Name="AJAXEnabledWebApplicationI18N1.DisplayFunctions.js"
Assembly="AJAXEnabledWebApplicationI18N1" />
</Scripts>
</asp:ScriptManager>