65.9K
CodeProject 正在变化。 阅读更多。
Home

自定义资源提供程序

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.64/5 (15投票s)

2009 年 3 月 5 日

公共领域

2分钟阅读

viewsIcon

45502

downloadIcon

1040

自定义资源提供程序, 便于使用 HTML 标记获取全局资源

Click to enlarge image

引言

.NET 提供了一种非常简单的方法,可以在 HTML 标记本身中为标签设置资源(如上所示),使用诸如 ResourceProviderFactory IResourceProvider 之类的类。本文介绍了一个简单的示例,使用 ASP.NET 和 C# 实现此功能(附带的解决方案是在 Visual Studio 2008 中创建的)。

背景

还记得在 .NET 1.1 中,Resgen 工具是如何从简单的文本文件生成“.resources”文件,并将特定于文化的 .resources 文件加载到 ResourceManger 实例中吗?现在我们有了这种很棒的方法,可以从资源文件中读取特定于文化的资源,用于我们的多语言应用程序。这是通过类 ResourceProviderFactory 和接口 IResourceProvider 实现的。

Using the Code

code2.jpg

在解决方案中,我们有一个使用 CustomResoureProvider 库的 Web 客户端。还有一个库项目“CommonResources”,其中包含所有特定于文化的资源文件。

Default.aspx 页面中,我们有一个下拉列表,用于选择不同的语言。选择不同的语言后,CustomResourceProvider 会加载所选语言的特定于文化的资源文件,并呈现相应的资源。

Web 客户端通过在 web.config 中指定全局化标签来了解 CustomeResourceProvider ,如下所示:

 <globalization uiCulture="auto" 
 culture="auto" resourceProviderFactoryType=
 " CustomeResourceProviders.
 ExternalResourceProviderFactory, 
 CustomeResourceProviders,
 Version=1.0.0.0 , Culture=neutral"/>

另一个需要注意的重要事项是重写的 InitializeCulture() 方法。

您可以随时添加更多的资源文件,以支持您的多语言应用程序中的更多语言。使用这种读取资源的方式的优势在于,为了向 Web 应用程序添加新的语言支持,我们无需进行任何代码更改。我们所要做的就是添加一个具有适当的特定于文化的名称的资源文件,并将所有资源翻译成新的语言,然后就可以使用了。

关注点

我在执行此操作时遇到的一个问题是,当“CommonResources”项目(在附带的解决方案中)中的资源文件名称为“Resources.resx”时,英语资源可以正常读取。但在更改语言时,无法读取特定于文化的资源,而是读取英语资源。我猜这可能与“Resources”是关键字有关。 任何对此有更多信息的人,请发布评论。

历史

  • 2009 年 3 月 5 日:初始发布
© . All rights reserved.