C#获取每种支持的语言的枚举名称

时间:2019-06-16 14:48:30

标签: c# enums localization internationalization

我熟悉如何从枚举值获取显示名称,基本上我只是在使用

 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
}

0 个答案:

没有答案