【问题标题】:Can I combine local resources in satellite assemblies?我可以在附属程序集中合并本地资源吗?
【发布时间】:2009-12-16 18:34:35
【问题描述】:

我有很多本地资源文件

  • /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"/>

【问题讨论】:

    标签: asp.net localization


    【解决方案1】:

    您的问题不是很清楚,您是在寻找 VS2008 的功能还是 ASP.NET 框架的功能。所以我会用代码解决方案。

    您使用的隐式绑定语法使用 ASP.NET 的默认 LocalResourceProvider,它采用资源所在的页面路径来计算要加载的资源。如果您的资源存储在其他地方,并且您仍想在前面的代码中使用隐式绑定系统税,您将需要使用您自己的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多