【问题标题】:Can't get value from resources file using reflection无法使用反射从资源文件中获取价值
【发布时间】:2015-10-04 15:12:25
【问题描述】:

我有两个用于本地化的 .resx 文件 - Global.en.resx 和 Global.resx(ru)。尝试使用 ResourceManager 按名称获取值我遇到了一个问题: 该值仅以俄语显示。

ResourceManager rm = new ResourceManager(resourceType.FullName, resourceType.Assembly);
ResourceSet rs = rm.GetResourceSet(CultureInfo.CurrentCulture, true, true);
foreach (DictionaryEntry d in rs)
{
    if (d.Key.ToString() == propName) displayName = (string)d.Value;
}

resourceType - 资源类,propName - 我要显示的属性的名称。 请帮帮我

【问题讨论】:

  • 当前文化是英语还是俄语?根据您的资源文件的名称,我猜当前(默认)文化是俄语...
  • 我改变了当前的文化,当我使用@MyResources.Global.PropertyName 从视图中显示它时它工作正常。但是当我尝试使用反射来获取价值时,它会像上面描述的那样失败
  • 它令人困惑,因为您发布的示例根本没有任何反射,那么您是否使用反射?在您发布的示例中,您将获得 current 文化,这可能是俄语,如果您更改 current 文化,它将起作用,但如果您想要不同的文化返回,你不能将CultureInfo.CurrentCulture传递给GetResourceSet,你需要制作一个英语文化并传递进去。
  • 其实我是用反射来获取ResourceType的,但是这里没有贴出来。无论如何,你是绝对正确的。我检查了我的 Thread.CurrentThread.CurrentUICulture 并且由于某些原因它的值是“ru”。谢谢!

标签: c# asp.net-mvc-4 localization resourcemanager displayattribute


【解决方案1】:

当您说您尝试通过名称获取值时,您指的是 ResourceManager 吗?您可以通过任何方式获取 ResourceManager,但您通过 CultureInfo 获取 ResourceSet,而不是名称。那是你的问题。

【讨论】:

  • 什么意思?如果您在谈论 rm.GetString(propName),我也尝试过这种方式,但它不显示属性值,它显示属性名称(什么是双重奇怪)
猜你喜欢
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
相关资源
最近更新 更多