2015-05-14 17 views
2

我的项目中有一个资源文件strings.resx,用于存储默认的英文字符串。为了测试目的,我创建了另外一个文件strings.zh-CN.resx,但存储的字符串不是真正的中文。它们只是将字符串附加到存储在strings.resx(主资源文件)中的字符串后生成的测试字符串。当用户登录到zh-CN文化时,该文件有助于捕获硬编码数据和未翻译的字符串。当当前线程文化是zh-CN时,是否有可能摆脱strings.zh-CN.resx文件并动态生成假资源?是否可以在不使用ResourceManager使用.resx文件的情况下即时创建伪资源?

基本上 - 有什么办法可以让ResourceManager在没有物理.resx文件的情况下为特定文化返回假字符串?

我正在使用Visual Studio自动生成的designer.cs文件来获取资源。我可以在designer.cs文件中看到,.resx文件中每个字符串都有一个静态属性。 ResourceManager在designer.cs中初始化的方式如下。

/// <summary> 
/// Returns the cached ResourceManager instance used by this class. 
/// </summary> 

    [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 
    public static global::System.Resources.ResourceManager ResourceManager { 
     get { 
      if (object.ReferenceEquals(resourceMan, null)) { 
       global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("xxx.xxx.Strings", typeof(Strings).Assembly); 
       resourceMan = temp; 
      } 
      return resourceMan; 
     } 
    } 

这是通过自动生成的代码添加静态属性的方式。

/// <summary> 
/// Looks up a localized string similar to Absolute. 
/// </summary> 
public static string Absolute { 
    get { 
     return ResourceManager.GetString("Absolute", resourceCulture); 
    } 
} 

我在查找扩展点。如果可能的话,我想钩入自己的自定义ResourceManager(或其他我不确定的东西),并在文化为zh-CN时返回假伪字符串。主要目的是为了测试目的,我不想生成一个虚假的物理资源文件。

+1

请通过[编辑]添加其他信息到您的问题,并从评论中删除它们。 – Alex

+0

顺便说一句,'ResourceManager'是.NET的一部分,不属于C# –

回答

1

当然可以。你知道ResourceManager的工作原理吗?有多种方法可以实现你想要的。一对是这些:

一个选项:看看后面的资源文件的代码。它告诉你,你需要在某个阶段创建ResourceManager的实例。一种方法是提供资源类型的名称(又名基本名称)和可以找到它的程序集。照着做!这会让你意识到你还需要一种资源类型(类) - 这样做:创建一个资源类型,然后创建ResourceManager的实例。该类型需要有一个公共属性,其名称为假字符串您要检索。一个示例如何做到这里:Stackoverflow: Dynamically create a class in C#

其他选项:熟悉一下模拟框架如何工作,如Moq。您可以应用相同的想法来伪造资源类型。因此,不要在飞行中创建资源类型,你可以有一个资源模拟,可以教会返回您的_fake stri

+0

谢谢。我想了解选项1.我认为它看起来是一个体面的方法,但问题是如何在自动生成的designer.cs文件中完成此操作。它是否提供任何扩展点? – murtazat

+0

我的意思是如何欺骗本地化框架,以相信假的字符串在运行时存在于某些假类(由您提到的方法创建)中。如何加载包含假字符串的类? – murtazat

+0

我知道我要求太多,但请在由visual studio生成的designer.cs文件的上下文中提供选项1的任何代码示例。非常感谢你。 – murtazat

相关问题