我可以在卫星装配中组合本地资源吗?

时间:2009-10-29 11:39:22

标签: asp.net localization

我有很多当地资源文件

  • /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 个答案:

答案 0 :(得分:5)

关于您是在寻找VS2008的功能还是ASP.NET框架的一个功能,您的问题并不是很明确。所以我会选择代码解决方案。

您正在使用的隐式绑定语法使用ASP.NET的默认LocalResourceProvider,它接受资源所在的页面路径以计算要加载的资源。如果您的资源存储在其他地方并且您仍希望在前面的代码中使用隐式绑定systax,则需要使用自己的Provider。听起来很复杂但很简单。

要执行此操作,您需要首先继承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