2011-07-07 58 views
1

我有一大堆的车型进行本地化种源文件(RESX)和我正在寻找一种方法来保持我的努力尽可能小:)生成MVC模型定义

从本质上讲,我有一个模型类,其中所有属性(根据需要)通过DisplayNameAttribute进行降级。

我想要做的是,构建一个工具,在类定义上查找属性(例如“Views.Contact”),然后生成(更新)默认的resx文件(例如“Views.Contact。 RESX“)。这个实现将遵循一个约定而不是配置方法。

有没有工具/例子,我错过了,这将使这项工作更容易?有没有任何框架(.NET4)的支持?

回答

3

比我想象的要容易。这里是我的(改善的)代码:

public void GenerateResx() 
    { 

     Type model = typeof(BuyCABModel); 


     List<Type> member = new List<Type>(); 
     member.Add(typeof(RegisterModel)); 
     member.Add(typeof(AddOpenAuthAccountModel)); 
     member.Add(typeof(LoginModel)); 
     CreateRes(member, "Views.Member.resx"); 


    } 
    private void CreateRes(List<Type> models, string resxFile) 
    { 

     using (ResXResourceWriter writer = new ResXResourceWriter("c:\\temp\\"+resxFile)) 
     { 

      foreach(Type model in models) 
      { 


       PropertyInfo[] ps= model.GetProperties(); 

       foreach (PropertyInfo p in ps) 
       { 
        foreach (Attribute a in p.GetCustomAttributes(true)) 
        { 
         if (a.GetType() == typeof(DisplayNameAttribute)) 
         { 
          DisplayNameAttribute d = (DisplayNameAttribute)a; 
          writer.AddResource(p.Name + "_DisplayName", d.DisplayName); 
         } 
         else if (a.GetType() == typeof(DisplayAttribute)) 
         { 
          DisplayAttribute d = (DisplayAttribute)a; 
          writer.AddResource(p.Name + "_DisplayName", d.Name); 
         } 

        } 
       } 
      } 
      writer.Generate(); 
      writer.Close(); 

     } 
    } 

提示:如果您需要在Visual Studio生成的designer.cs代码只是打开VS中的.resx和切换访问修饰符下拉

+0

非常感谢您对拯救我的一天。我不敢相信没有人投票赞成!!相信我,如果我可以投两次我会:) –