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 "  })

转载于:https://www.cnblogs.com/lyk831216/archive/2011/03/29/Enum_Localizable.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值