2015-05-14 44 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

相關問題