C#中动态引用资源文件

14

我有一个应用程序,我正在实现本地化。

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

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

通常,我会引用如下: String result = Login.foo; 并且result=="hello";

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

我需要这样的东西:

Login["foo"];

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

2个回答

20

你需要实例化一个 ResourceManager 对于 Login.resx:

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

查看由IDE创建的资源文件的代码后台文件中生成的代码可能会有所帮助。这些文件基本上包含每个资源的只读属性,该属性会向内部资源管理器发出查询。


12
更简单的方法是,您可以直接访问资源本身的ResourceManager。例如:Login.ResourceManager.GetString("foo")。 - Chris Haines

2
如果你像我一样把资源文件放在 App_GlobalResources 文件夹中,那么你需要使用以下代码:

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

我用了一段时间才明白这一点。希望这对某些人有所帮助。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接