diff --git a/src/Attributes/LocalizationAttribute.cs b/src/Attributes/LocalizationAttribute.cs new file mode 100644 index 0000000..5658339 --- /dev/null +++ b/src/Attributes/LocalizationAttribute.cs @@ -0,0 +1,24 @@ +namespace NSExt.Attributes; + +/// +/// 指定本地化资源类型 +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Field)] +public class LocalizationAttribute : Attribute +{ + /// + /// Initializes a new instance of the class. + /// + public LocalizationAttribute(Type resourceClass) + { + ResourceClass = resourceClass; + } + + /// + /// Gets or sets 资源类型 + /// + /// + /// 资源类型 + /// + public Type ResourceClass { get; set; } +} \ No newline at end of file diff --git a/src/Extensions/EnumExtensions.cs b/src/Extensions/EnumExtensions.cs index 80ae7bd..0c75c95 100644 --- a/src/Extensions/EnumExtensions.cs +++ b/src/Extensions/EnumExtensions.cs @@ -1,3 +1,6 @@ +using System.Reflection; +using NSExt.Attributes; + namespace NSExt.Extensions; /// @@ -12,9 +15,15 @@ public static class EnumExtensions /// description属性 public static string Desc(this Enum e) { - var t = e.GetType(); - var fi = t.GetField(Enum.GetName(t, e)!); - var attrs = (DescriptionAttribute[])fi!.GetCustomAttributes(typeof(DescriptionAttribute), false); - return (attrs.Length != 0 ? attrs[0].Description : Enum.GetName(t, e)) ?? string.Empty; + var t = e.GetType(); + var fi = t.GetField(Enum.GetName(t, e)!); + var descAttr = fi!.GetCustomAttribute(false); + if (descAttr is null) { + return Enum.GetName(t, e); + } + + var str = descAttr.Description; + var locAttr = fi!.GetCustomAttribute(false); + return locAttr is null ? str : locAttr.ResourceClass.GetProperty(str)?.GetValue(default) as string ?? str; } } \ No newline at end of file