2

我有这个功能,它可以很好地从这个名为OkayMessages的特定资源文件中获取翻译值。

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。

4

2 回答 2

5

在错误的方向搜索了一段时间后,我才找到了这个问题的最简单的答案。原来有一个方法叫GetGlobalResourceObject.

所以就我而言,我现在使用这行代码来完成所有工作:

GetGlobalResourceObject("OkayMessages", "PasswordChanged").ToString();
于 2012-07-08T15:57:54.203 回答
1

仔细阅读这篇文章,你会发现你需要指定正确的资源命名空间。那是你的问题。如果 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);
        }
    }
}

如果将资源文件放入 Resources 文件夹,则必须更新资源命名空间:

var resourceName = "WebApplication1.Resources." + resourceFileName;
于 2012-07-08T11:38:09.367 回答