Share via


ASP.NET 应用程序中的资源

更新:2007 年 11 月

当您已经为 ASP.NET 应用程序创建附属程序集后,必须将它们放置在公共语言运行库可以定位和使用这些程序集的特定位置。附属程序集在 ASP.NET 应用程序和 ASP.NET 控件中的目录结构不同于附属程序集在基于 Windows 的应用程序中的目录结构。ASP.NET 应用程序可以包含程序集。但是,因为 ASP.NET 页被动态转换成程序集,所以程序集名称在事先是不知道的,并且标准附属程序集配置不适用。本节介绍如何使用 ASP.NET 页和 ASP.NET 控件中的资源。

说明:

创建和编译将在 ASP.NET 应用程序中使用的资源的过程与为基于 Windows 的应用程序创建资源的过程相同。有关此过程的详细信息,请参见创建资源文件打包和部署资源创建附属程序集

ASP.NET 页中的资源

要使用 ASP.NET 页中的资源,请首先创建一个并行主程序集来存储您的应用程序的资源。此程序集将包含应用程序的默认或非特定资源。接下来,为您的应用程序支持的每一区域性创建包含本地化资源的附属程序集。将主程序集安装到应用程序的 bin 目录中,并将附属程序集安装到适当的子目录中。

说明:

当您使用此模型部署 ASP.NET 应用程序中的资源时,所有程序集均被影像复制到全局程序集缓存中,从而会减少潜在的锁定问题。

下面是在 ASP.NET 页上使用的示例,该示例创建一个 ResourceManager 以检索相应的资源。

<%
    Dim a As Assembly = Assembly.Load("myApp")
    Dim rm As ResourceManager = New ResourceManager("myApp", a)
    Response.Write(rm.GetString("string"))
    %>
<%
    Assembly a = Assembly.Load("myApp");
    ResourceManager rm = new ResourceManager("myApp", a);
    Response.Write(rm.GetString("string"));
    %>

您可以显式指定用来检索 .aspx 页中资源的区域性,方法是遵循前面示例中的代码行,这些代码根据指定的区域性创建 CultureInfo 对象,并使用 CultureInfo 的值初始化 CurrentUICulture 属性。下面的示例强制每一次都检索德语资源,因为它将 CurrentUICulture 属性设置为德语父区域性“de”。

Thread.CurrentThread.CurrentUICulture = new CultureInfo("de")
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de");

请注意,尽管您可以指定类似“de”这样的非特定区域性来创建 CultureInfo 对象(该对象可用于初始化 CurrentUICulture 属性),但您必须指定特定区域性来初始化 CurrentCulture 属性CurrentCulture 属性需要特定区域性(即与语言和区域均关联的区域性),例如(“de-AT”)表示奥地利德语。非特定语言区域性“de”将无法使用,因为它只和语言相关联。为了以 CurrentCulture 属性所要求的格式创建 CultureInfo 对象,应使用 CultureInfo.CreateSpecificCulture 方法。此方法创建 CultureInfo 对象,该对象表示与指定非特定区域性相关联的特定区域性。下面的示例使用 CultureInfo.CreateSpecificCulture 方法来创建 CultureInfo 对象,该对象表示与非特定区域性“de”相关联的特定区域性,并且使用该区域性来初始化 CurrentCulture 属性的值。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

最好在您的 .aspx 页中显式地设置 CurrentUICultureCurrentCulture 属性的值。下面的示例将 CurrentCulture 设置为“de”,然后使用 CurrentCulture 的值来初始化 CurrentUICulture 属性。

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de")

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

CultureInfo.CreateSpecificCulture 方法还允许您使用 Web 浏览器的当前语言来初始化 .aspx 页中的 CurrentCulture 属性。在下面的示例中,Request.UserLanguages 属性将 Web 浏览器的当前语言作为字符串返回。CultureInfo.CreateSpecificCulture 方法分析此字符串并以可用来初始化 CurrentCulture 属性值的格式返回 CultureInfo 对象。

' Set the CurrentCulture property to the culture associated with the Web
' browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0])

' It is good practice to explicitly set the CurrentUICulture property.
' Initialize the CurrentUICulture property
' with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
// Set the CurrentCulture property to the culture associated with the Web
// browser's current language setting.
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages[0]);

// It is good practice to explicitly set the CurrentUICulture property.
// Initialize the CurrentUICulture property
// with the CurrentCulture property.
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

有关在 ASP.NET 应用程序中使用资源的更多示例,请参见 如何:以编程方式检索资源值 教程和 ASP.NET 快速入门中的“本地化 ASP.NET 应用程序”和“使用资源文件”示例。

ASP.NET 控件中的资源

如果您的 ASP.NET 应用程序是使用 ASP.NET 控件开发的,则您可以使用与上述相同的目录结构。当您创建控件时,您可以写入代码来使用资源以向用户显示不同的信息组。因为要编译控件,所以它们具有程序集。这允许您将一组默认资源嵌入到该程序集中。您可以为控件使用的资源创建附属程序集,并且将这些程序集放置在附属程序集所应位于的目录结构中。有关详细信息,请参见创建附属程序集。将控件和控件的资源放置在应用程序根的 bin 目录中。以下图例提供了正确的目录结构示例。

具有 ASP.NET 控件目录的 ASP.NET 应用程序

设置为 AppRoot 的主 ASP.NET 目录

您可以将 myControl 的多个实例(参见上面的图例)放置在 myPage.aspx 上。您可以设置每个版本引用文件项的不同资源。以下 ASP.NET 代码示例阐释了这一点。

<Loc:myControl runat="server" Text="entry1" />
<Loc:myControl runat="server" Text="entry2" />

在此示例中,ResourceManager 使用应用程序的 CultureInfo.CurrentUICulture 属性来确定要检索的资源。

下面的示例适用于 Button 控件。Text 变量表示被检索并随后在 .aspx 页的控件中设置的属性值。该值用于确定要检索的项的名称。在此示例中,它是用来向用户显示结果的相同的属性。

Public Class myControl
Inherits Button

    Protected Overrides Sub Render(HtmlTextWriter writer)
        ' rm refers to the ResourceManager.
        Text = rm.GetString(Text)
        MyBase.Render(writer)
    End Sub
End Class
public class mycontrol : Button 
{
    protected override void Render(HtmlTextWriter writer) 
    {
        // rm refers to the ResourceManager.
        Text = rm.GetString(Text);      
        base.Render(writer);
    }
}

请参见

概念

应用程序中的资源

创建资源文件

打包和部署资源

创建附属程序集

参考

System.Globalization.CultureInfo

其他资源

创建 ASP.NET 网站