从MVC模型定义生成资源文件(resx)

时间:2011-07-07 13:12:24

标签: c# .net-4.0 razor

我有一堆本地化的模型,我正在寻找一种尽可能小的方法:)

基本上,我有一个模型类,其中所有属性(根据需要)都使用DisplayNameAttribute进行了解析。

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

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

1 个答案:

答案 0 :(得分: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并切换Access Modifier DropDown