zoukankan      html  css  js  c++  java
  • C# Enum 类型的本地化

    枚举类型本地化操作的简单方案,并应用到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" })
    披荆斩棘,朝自己的信仰!Go on
  • 相关阅读:
    转:什么是即时编译(JIT)!?OpenJDK HotSpot VM剖析
    用好spring mvc validator可以简化代码
    接口服务中的日志
    rest api参数与content-type
    【单页应用】全局控制器app应该干些什么?
    【webapp的优化整理】要做移动前端优化的朋友进来看看吧
    【单页应用】理解MVC
    【单页应用】view与model相关梳理
    【单页应用之通信机制】view之间应该如何通信
    【单页应用巨坑之History】细数History带给单页应用的噩梦
  • 原文地址:https://www.cnblogs.com/lyk831216/p/Enum_Localizable.html
Copyright © 2011-2022 走看看