2012-06-24 87 views
2

我有這個功能,它工作正常,從這個特定的資源文件中獲得一個名爲OkayMessages的翻譯值。動態初始化ResourceManager

public static string GetResourceString(string resourceKey){ 
    ResourceManager resourceManager = Resources.OkayMessages.ResourceManager; 
    return resourceManager.GetString(resourceKey); 
} 

但我有1個多資源文件,我想這個功能,從這些文件中獲取值以及..只是,我在使用動態/程序選擇正確的資源(經理)的麻煩。 我試圖使用下面的代碼,以及一些變種,但我總是得到一個錯誤。

public static string GetResourceString(string resourceFile, string resourceKey){ 
    ResourceManager resourceManager = new System.Resources.ResourceManager("Resources." + resourceFile, Assembly.GetExecutingAssembly()); 
    return resourceManager.GetString(resourceKey); 
} 

我得到的大部分時間的錯誤是:找不到適合指定文化或中性文化的任何資源。確保「Resources.OkayMessages.resources」正確嵌入或鏈接到程序集..

更新:我使用\ App_GlobalResources文件\文件夾我的資源文件,似乎這就是問題所在。當我在我的項目的根目錄中放置一個資源文件時,我可以初始化一個ResourceManager而沒有任何問題。

+1

所以這裏的根本問題是,在App_GlobalResources文件夾資源編譯到自己的組件(App_GlobalResources文件)。 GetGlobalResourceObject方法知道使用正確的程序集。 –

回答

5

在搜索後一段時間錯誤的方向,我只是找到了這個問題最簡單的答案。事實證明,有一種方法叫做GetGlobalResourceObject

所以在我的情況,我現在用的這行代碼執行所有:

GetGlobalResourceObject("OkayMessages", "PasswordChanged").ToString(); 
+0

您是否可以使用名爲Resources.OkayMessages的文件(就像您的原始示例所暗示的那樣)執行此操作,或者您是否將其命名爲「OkayMessages」?爲了讓它工作,我不得不在文件名中沒有句號,因爲它一直認爲這段時間是本地化的拼寫點。 – Peter

1

仔細閱讀這個article,你會發現你需要指定正確的資源名稱空間。那是你的問題。這裏正在例如,如果OkayResources.resx位於項目的根文件夾:

using System.Reflection; 
using System.Resources; 
using System.Web.UI; 

namespace WebApplication1 
{ 
    public partial class _Default : Page 
    { 

     public _Default() 
     { 
      var result = GetResourceString("OkayResources", "SomeKey"); 
     } 

     private static string GetResourceString(string resourceFileName, string key) 
     { 
      var resourceName = "WebApplication1." + resourceFileName; 
      var resourceManager = new ResourceManager(resourceName, Assembly.GetExecutingAssembly()); 
      return resourceManager.GetString(key); 
     } 
    } 
} 

如果你把你的資源文件到資源文件夾,你必須更新資源的命名空間:

var resourceName = "WebApplication1.Resources." + resourceFileName; 
+0

我仍然遇到同樣的錯誤。我正在使用\ App_GlobalResources \文件夾,因此,我的資源文件駐留在名稱空間資源中。這會有所作爲嗎? – Tys

+0

在我的代碼的其他部分中,我通常會調用像這樣的資源字符串Resources.OkayMessages.UserLoggedIn – Tys

+0

在使用您的解決方案後,我更新了一些調查結果。問題似乎是使用\ App_GlobalResources \文件夾。 – Tys