Создать файл ресурсов (resx) из определения модели MVC - PullRequest
1 голос
/ 07 июля 2011

У меня есть куча моделей для локализации, и я ищу способ, чтобы мои усилия были как можно меньше :)

По сути, у меня есть классы моделей, где все свойства (по мере необходимости)) с помощью DisplayNameAttribute.

Я хотел бы создать инструмент, который ищет свойство в определении класса (например, «Views.Contact»), а затем генерирует (обновляет) значение по умолчанию.Файл resx (например, «Views.Contact.resx»).Эта реализация будет следовать соглашению о конфигурации.

Существуют ли какие-либо инструменты / примеры, которые я пропустил, которые облегчат эту работу?Есть ли какая-либо поддержка (.NET4) для этого?

1 Ответ

3 голосов
/ 08 июля 2011

Проще, чем я думал.Вот мой (улучшаемый) код:

 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();

        }
    }

Совет. Если вам нужен код designer.cs, сгенерированный в Visual Studio, просто откройте .resx в VS и переключите модификатор доступа DropDown

...