Asp.net本地化 - 覆盖页面将使用的resx文件

时间:2011-05-04 21:12:36

标签: asp.net localization override resx resourcemanager

尝试将主题和本地化结合起来......我在做什么:

本地化A.aspx,创建:

  • App_LocalResources文件\ a.aspx.resx
  • App_LocalResources文件\ a.aspx.resx.fr ...

但是,我想添加更多选项。我希望:

  • App_LocalResources文件\ a_theme1.aspx.resx
  • App_LocalResources文件\ a_theme1.aspx.resx.fr
  • App_LocalResources文件\ a_theme2.aspx.resx
  • App_LocalResources文件\ a_theme2.aspx.resx.fr

因此,如果我在Theme1中,我想要使用主题1资源集。

有没有办法可以覆盖A.aspx在加载时使用哪个resx文件?

即,当它试图加载a.aspx.resx.fr时,我想用a_theme1.resx.fr替换它

非常感谢任何和所有想法! :)

1 个答案:

答案 0 :(得分:1)

看看这里:

ResourceManager.GetResourceFileName Method

  

此方法使用CultureInfo的名称   属性作为文件名的一部分   除了不变之外的所有文化   文化。此方法不会查找   集会的清单或触摸   磁盘,仅用于构造   什么是资源文件名(适合   传递给ResourceReader   构造函数)或清单资源   blob名称应为。

     

派生类可以覆盖它   寻找不同的方法   扩展名,例如“.ResX”或a   完全不同的命名方案   文件。

我认为你想要做的就是这样:

public class ResxResourceManager : ResourceManager
{  
    protected override string GetResourceFileName(
         System.Globalization.CultureInfo culture)
    {
        return base.GetResourceFileName(culture);       
    }

    public string GetResxFileName(System.Globalization.CultureInfo culture)
    {
        return GetResourceFileName(culture).Replace(".resources", ".resx");
    }
}

有关此内容的更多信息:

Creating a custom Resource Provider

Under the Hood of BuildManager and Resource Handling