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