33

我正在开发一个本地化的 C#.NET 应用程序,我们正在使用一个strings.resx文件来翻译应用程序中的硬编码字符串。我使用以下代码来提取它们:

using MyNamespace.Resources

...

string someString = strings.someString;

但是,现在我希望能够在调用中定义字符串的名称,如下所示:

string someString = GetString("someString");

我一直在玩弄ResourceManager,但我找不到将它定向到我的strings.resx文件的方法。

我怎么做?

4

5 回答 5

52

一点点搜索就可以了。我ResourceManagerstrings课堂上享有以下权利:

ResourceManager rm = strings.ResourceManager;
string someString = rm.GetString("someString");
于 2012-11-02T11:39:59.293 回答
23

ResourceManager.GetString应该做。

从 MSDN 中剥离的示例:

ResourceManager rm = new ResourceManager("RootResourceName",
                                         typeof(SomeClass).Assembly);
string someString = rm.GetString("someString");
于 2012-11-02T11:30:41.140 回答
12

我在使用 ASP.NET Core MVC 时遇到了同样的问题,并设法使用

ResourceManager rm = new ResourceManager(typeof(YourResourceClass));
string someString = rm.GetString("someString");

与@Vlad 的解决方案非常相似,但除此之外我有一个MissingManifestResourceException

于 2016-06-16T15:46:40.237 回答
10

有更简单的方法可以做到这一点

 [NameOfyourResxfile].ResourceManager.GetString("String Name");

在你的情况下

strings.resx.ResourceManager.GetString("someString");
于 2017-03-18T17:19:56.280 回答
5

你可以这样写一个静态方法:

public static string GetResourceTitle<T>(string key)
{
  ResourceManager rm = new ResourceManager(typeof(T));
  string someString = rm.GetString(key);
  return someString;
}

并在任何地方调用:

var title=  GetResourceTitle<*YouResourceClass*>(key);

当您想要一个通用函数来获取任何资源文件的字符串时,它很有用。

于 2017-01-26T08:13:40.733 回答