我熟悉如何从枚举值获取显示名称,基本上我只是在使用
public static string GetDisplayName(this Enum enumValue)
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}
但是对于我来说,我需要获取应用程序支持的所有语言的所有显示名称。我有以下可行的方法,但是我无法想象这是最好的主意:
System.Globalization.CultureInfo currentCulture = System.Globalization.CultureInfo.CurrentCulture;
try
{
foreach (string culture in supportedLanguages)
{
System.Globalization.CultureInfo newCulture = new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = newCulture;
Thread.CurrentThread.CurrentUICulture = newCulture;
foreach (testEnum e in System.Enum.GetValues(typeof(testEnum)))
{
if (reader.Value.ToString() == GetDisplayName(e))
{
return e;
}
}
}
}
finally
{
Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;
}
来回更改线程文化似乎不是一个好主意,但这也许是我唯一的选择?有谁有更好的主意吗?
应用程序是一个asp.net MVC应用程序,我在其中使用web.config
<globalization uiCulture="en" culture="en-US" fileEncoding="utf-8" />
设置当前语言,该语言从Resx文件中读取值。样本枚举是:
public enum PriorityEnum
{
[Display(Name = "Unknown", ResourceType = typeof(RootResource))]
Unknown,
[Display(Name = "Minor", ResourceType = typeof(RootResource))]
Minor,
[Display(Name = "Moderate", ResourceType = typeof(RootResource))]
Moderate,
[Display(Name = "Severe", ResourceType = typeof(RootResource))]
Severe,
[Display(Name = "Extreme", ResourceType = typeof(RootResource))]
Extreme
}