You provide your own implementation of (generically) mapping an enum value to its description, in a DisplayAttribute declaration.

    public static string GetDisplayDescription(this Enum enumValue, Func<string, string> translationFunction = null)
        string text = enumValue.ToString();
        string text2 = enumValue.GetType().GetMember(text).FirstOrDefault()?.GetCustomAttribute<DisplayAttribute>()?.GetDescription() ?? text;
        if (translationFunction != null)
            return translationFunction(text2);

        return text2;

Querying each time for all the dynamic information is very expensive: a better implementation would be to store the calculated value in a cache, so that further calls come at no cost. There are many memoizing implementation that make this very easy, and the function much more useful. Just my opinion, of course...

Feel free to submit pull request, if everything works as expected we will merge it.