在C#中动态引用资源文件

时间:2020-03-05 18:43:46  来源:igfitidea点击:

我有一个正在实施本地化的应用程序。

现在,我需要在资源文件中动态引用一个名称。

假设我有一个名为Login.resx的资源文件,其中包含许多字符串:foo =" hello",bar =" cruel"和baz =" world"

通常,我将其称为:
字符串结果= Login.foo;
和result ==" hello";

我的问题是,在代码编写时,我不知道我是否要引用foo,bar或者baz,我有一个包含" foo"," bar"或者" baz"的字符串。

我需要类似的东西:

Login [" foo"];

有人知道是否有任何方法可以动态引用资源文件中的字符串吗?

解决方案

回答

我们需要为Login.resx实例化一个ResourceManager:

var resman = new System.Resources.ResourceManager(
    "RootNamespace.Login",
    System.Reflection.Assembly.GetExecutingAssembly()
)
var text = resman.GetString("resname");

在IDE创建的资源文件的代码隐藏文件中查看生成的代码可能会有所帮助。这些文件基本上包含对内部资源管理器进行查询的每个资源的只读属性。

回答

如果像我一样将Resource文件放入App_GlobalResources文件夹中,则需要使用

global::System.Resources.ResourceManager
  temp = new
  global::System.Resources.ResourceManager("RootNamespace.Login",
  global::System.Reflection.Assembly.Load("App_GlobalResources"));

我花了一段时间才弄清楚这一点。希望这会帮助某人。 :)