Enum'lar ekranda gösterilirken nasıl çoklu dil yapılır.

Enum'lar ekranda gösterilirken nasıl çoklu dil yapılır.


Konumuzu ele alırken çoklu dil olarak ele alacağız. Eğer ki çoklu dil kullanmayacaksanız localization kısımlarını göz ardı edebilirsiniz.

Şu şekilde örnek bir enumımız olsun

public enum EnumEntityStatus
{
    ACTIVE = 0,
    PASSIVE = 1,
    DELETED = 2
}
  • Öncelikle localization dosyamızı oluşturalım. (LResources.resx dosyasını yeni bir item olarak ekleyiniz.)
  • Bu dosyayı IDE'nizde açınız ve Access Modifier'ını Public olarak değiştiriniz.
  • Sırasıyla Name ve Value'leri doldurunuz
  1. ACTIVE, AKTİF
  2. PASSIVE, DEVRE DIŞI
  3. DELETED, SİLİNDİ

Localization dosyamız hazır. Şimdi Enum'ı ayarlayalım. Çoklu dil yapmayacaksanız ResourceType parametresini silebilirsiniz.

public enum EnumEntityStatus
{
   [Display(Description = "ACTIVE", ResourceType = typeof(LResources))]
    ACTIVE = 0,
   [Display(Description = "PASSIVE", ResourceType = typeof(LResources))]
    PASSIVE = 1,
   [Display(Description = "DELETED", ResourceType = typeof(LResources))]
    DELETED = 2
}

Evet buraya kadar herşey güzel, peki bu değerleri ekranda nasıl göstereceğiz? Bunun için Reflection kullanacağız. Ayrıca Enum'lar için extension yazacağız ve kodumuz daha generic olacaktır.

public static string GetDisplayDescription(this Enum enumValue)
    {
        if (enumValue != null)
            return enumValue.GetType().GetMember(enumValue.ToString())
                .FirstOrDefault()?
                .GetCustomAttribute<DisplayAttribute>()
                ?.GetDescription() ?? enumValue.ToString();
        return string.Empty;
   }

Bu işlemi yaptıktan sonra genel kodlamalarımız bitmiş oldu. Şimdi modelinizi basarken enum değerinizin sonuna .GetDisplayDescription() eklerseniz amacımıza ulaşmış olacağız.

An error has occurred. This application may no longer respond until reloaded. Reload 🗙