我能否在卫星程序集中组合本地资源?

6

我有很多本地资源文件

  • /Controls/App_LocalResources/SomeControl.ascx.resx,
  • /Pages/App_LocalResources/SomePage.aspx.resx等。

我想添加另一种语言,但不想浏览所有文件夹并添加例如SomeControl.ascx.de.resx文件,然后必须重新编译整个内容。

我想使用卫星程序集,并将所有文件嵌入到类似MyWebPage.de.dll的东西中。

在VS2003版本中,全局资源可以实现这一点,但我不确定在VS2008版本中是否可以对本地资源进行此操作?

我正在使用以下语法访问资源:

<asp:label id="lblSomething" runat="server" meta:resourcekey="labelFirstName"/>
1个回答

5
你的问题并不是很清楚,无法确定你是在寻找VS2008的功能还是ASP.NET框架的功能。因此,我将提供代码解决方案。
你使用的隐式绑定语法使用了ASP.NET的默认LocalResourceProvider,它接受页面路径作为输入,以确定要加载哪些资源。如果你的资源存储在其他位置,并且仍然想在前端代码中使用隐式绑定语法,那么你需要使用自己的提供程序。听起来很复杂,但实际上很简单。
要做到这一点,你需要首先子类化ResourceProviderFactory,并覆盖两个方法。
IResourceProvider CreateGlobalResourceProvider(string classKey)
IResourceProvider CreateLocalResourceProvider(string virtualPath)

然后实现自己的IResourceProvider,使用ResourceManager从卫星程序集中获取资源。

public interface IResourceProvider
{
     object GetObject(string resourceKey, CultureInfo culture);
     IResourceReader ResourceReader { get; }
}

接下来,您需要在web.config文件中添加配置,让ASP.NET知道要使用您的SatelliteResourceProviderFactory并将资源移动到您的外部程序集中,但这应该足以让您开始了。

可以在此处找到大量文档...在“构建数据库资源提供程序”部分下...

http://msdn.microsoft.com/en-us/library/aa905797.aspx#exaspnet20rpm_topic4


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接