C# Enum 類型的本地化

來源:互聯網
上載者:User
枚舉類型本地化操作的簡單方案,並應用到Asp.net MVC的DropdownList中。 

/// <summary>
    /// Enum Localizable. default resouce key={Prefix}_{Enum}
    /// If you ignore Prefix,will return {EnumTypeName}_{Enum} format
    /// </summary>
    [AttributeUsage(AttributeTargets.Enum, AllowMultiple = true, Inherited = true)]
    public class LocalizableAttribute : Attribute
    {
        public LocalizableAttribute(Type language)
        {
            this.LanguageType = language;
        }
        public LocalizableAttribute(Type language, String prefix)
            :this(language)
        {
            Prefix = prefix;
        }

        public Type LanguageType
        {
            get;
            set;
        }
        public string Prefix
        {
            get;
            set;
        }
    }
    public static class EnumerableExtension
    {
        public static void ForEach<T>(this IEnumerable<T> enumerable, Action<T> action)
        {
            foreach (T item in enumerable)
            {
                action(item);
            }
        }

        public static string ToLocalizable(this Enum value)
        {
            LocalizableAttribute customAttr=(LocalizableAttribute) Attribute.GetCustomAttribute(value.GetType(), typeof(LocalizableAttribute));
            ResourceManager _resources = new ResourceManager(customAttr.LanguageType);
            var prefix=customAttr.Prefix;
            if (string.IsNullOrEmpty(prefix))
            {
                prefix=value.GetType().Name;
            }

            string rk = String.Format("{0}_{1}",prefix,value);
            string localiza=_resources.GetString(rk);
            if (localiza == null)
            {
                return value.ToString();
            }
            return localiza;
        }

        public static IEnumerable<SelectListItem> ToSelectList(this Enum enumValue)
        {
            return from Enum e in Enum.GetValues(enumValue.GetType())
                   select new SelectListItem { Selected = e.Equals(enumValue), Text = EnumerableExtension.ToLocalizable(e), Value = e.ToString() };
        }
    }使用:
[Localizable(typeof(CoreLanguage),"UesrTitle")] 
    public enum UserTitle
    {
        Mr,
        Miss
    }


//in view
@Html.DropDownListFor(m => m.UserTitle, Model.UserTitle.ToSelectList(), new { id = "UserTitle" })
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.