Updated on Kisan Patel
Problem:
I have a localized application, and I am wondering if it is possible to have the Display Name for a certain model property set from a Resource.
Solution
Solution 1:
Here if you want to support many types of resources:
public class LocalizedDisplayNameAttribute : DisplayNameAttribute { private readonly PropertyInfo nameProperty; public LocalizedDisplayNameAttribute(string displayNameKey, Type resourceType = null) : base(displayNameKey) { if (resourceType != null) { nameProperty = resourceType.GetProperty(base.DisplayName, BindingFlags.Static | BindingFlags.Public); } } public override string DisplayName { get { if (nameProperty == null) { return base.DisplayName; } return (string)nameProperty.GetValue(nameProperty.DeclaringType, null); } } }
Then use it like this:
[LocalizedDisplayName("Age", typeof(MyNameSpace.Resources.Form))] public string Age { get; set; }
Solution 2:
// Before C# 6.0 [Display(Name = "Age", ResourceType = typeof(Testi18n.Resource))] public string Age { get; set; } // After C# 6.0 // [Display(Name = nameof(Resource.Age), ResourceType = typeof(Resource))]