我有一堆本地化的模型,我正在寻找一种尽可能小的方法:)
基本上,我有一个模型类,其中所有属性(根据需要)都使用DisplayNameAttribute进行了解析。
我想做的是,构建一个工具,在类定义中查找属性(例如“Views.Contact”),然后生成(更新)默认的resx文件(例如“Views.Contact.resx” “)。此实现遵循约定优于配置方法。
是否有任何工具/示例,我错过了,这将使这项工作更容易?是否有任何框架(.NET4)支持?
答案 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