C# 从字符串资源动态获取字符串
我正在开发一个本地化的C#.NET应用程序,我们正在使用C# 从字符串资源动态获取字符串,c#,resources,C#,Resources,我正在开发一个本地化的C#.NET应用程序,我们正在使用strings.resx文件翻译应用程序中的硬编码字符串。我使用以下代码来提取它们: using MyNamespace.Resources ... string someString = strings.someString; 但是,现在我希望能够在调用中定义字符串的名称,如下所示: string someString = GetString("someString"); public static string GetResou
strings.resx
文件翻译应用程序中的硬编码字符串。我使用以下代码来提取它们:
using MyNamespace.Resources
...
string someString = strings.someString;
但是,现在我希望能够在调用中定义字符串的名称,如下所示:
string someString = GetString("someString");
public static string GetResourceTitle<T>(string key)
{
ResourceManager rm = new ResourceManager(typeof(T));
string someString = rm.GetString(key);
return someString;
}
我一直在玩弄ResourceManager
,但是我找不到一种方法将它指向我的strings.resx
文件
我该怎么做?该怎么做
MSDN中的简化示例:
ResourceManager rm = new ResourceManager("RootResourceName",
typeof(SomeClass).Assembly);
string someString = rm.GetString("someString");
稍微搜索一下就成功了。我的
strings
类中有正确的ResourceManager
:
ResourceManager rm = strings.ResourceManager;
string someString = rm.GetString("someString");
我在使用ASP.NET Core MVC时遇到了同样的问题,并设法用
ResourceManager rm = new ResourceManager(typeof(YourResourceClass));
string someString = rm.GetString("someString");
非常类似于@Vlad的解决方案,但在其他方面,我有一个
MissingManifestResourceException
您可以编写如下静态方法:
string someString = GetString("someString");
public static string GetResourceTitle<T>(string key)
{
ResourceManager rm = new ResourceManager(typeof(T));
string someString = rm.GetString(key);
return someString;
}
公共静态字符串GetResourceTitle(字符串键)
{
ResourceManager rm=新的ResourceManager(类型(T));
string someString=rm.GetString(key);
返回sometstring;
}
并随时拨打:
var title= GetResourceTitle<*YouResourceClass*>(key);
var title=GetResourceTitle(键);
当您需要一个通用函数来获取任何资源文件的字符串时,它非常有用。有一种更简单的方法
[NameOfyourResxfile].ResourceManager.GetString("String Name");
就你而言
strings.resx.ResourceManager.GetString("someString");
是的,我发现了,但现在我知道应该如何实例化我的
ResourceManager
。我使用ResourceManager rm=strings.ResourceManager代码>。无需实例化IE:它已经在那里了。@Bart:你试过了吗?是的,但我不知道“RootResourceName”
或SomeClass
应该是什么。strings.ResourceManager
要简单得多。@Bart:class仅用于访问程序集。您可能只需要使用Assembly.GetCurrentAssembly
之类的工具。而RootResourceName
是,根据文档,“资源文件的根名称,不带扩展名,但包含任何完全限定的命名空间名称。例如,名为MyApplication.MyResource.en-US.resources的资源文件的根名称是MyApplication.MyResource。”但是,如果资源管理器已经可用,最好照原样去做。很好的解决方案!