c # получить имя для каждого поддерживаемого языка для enum - PullRequest
0 голосов
/ 16 июня 2019

Я знаком с тем, как получить отображаемое имя из значения перечисления, в основном я просто использую

 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;
}

Изменение культуры потоков вперед и назад не кажется хорошей идеей, но, может быть, это единственный вариант, открытый для меня? У кого-нибудь есть идея получше?

Приложение - приложение MVC asp.net, где я использую 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...