我有一个MVC4网站,其中包含不同的资源文件,本地化工作正常。
但我想要做的是从数据库中获取值,而不是处理resx文件。
我扩展了“DisplayNameAttribute”类以获取键(整数)和CultureInfo对象,并使用它们从数据库中检索值。
我想从CultureInfo获得的是它的字符串表示(例如“en-US”或“fr-FR”)。
我的问题是我可以将整数传递给扩展类的构造函数,但不能传递给CultureInfo。
扩展属性的代码示例:
public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
private int ResourceKey { get; set; }
private CultureInfo Culture { get; set; }
public LocalizedDisplayNameAttribute(int resourceKey, CultureInfo culture)
{
ResourceKey = resourceKey;
Culture = culture;
}
public override string DisplayName
{
get
{
string displayName = "Get from database.. TEST";
return string.IsNullOrEmpty(displayName) ? string.Format("[[{0}]]", ResourceKey) : displayName;
}
}
}
我想做什么:
[LocalizedDisplayName(1, Thread.CurrentThread.CurrentUICulture))]
public string userName { get; set; } //The full name of the user
甚至更好:
private CultureInfo culture = Thread.CurrentThread.CurrentUICulture;
[LocalizedDisplayName(1, culture))]
public string userName { get; set; } //The full name of the user
我的问题是,我该怎么做?
答案 0 :(得分:0)
这个问题的答案由Ksven首先提供,Tomi Lammi在评论中第二个提供:
由于Thread.CurrentThread.CurrentUICulture不是编译时值,因此无法将其作为LocalizedDisplayName属性的参数提供。因此,解决方案是在属性方法中使用它,而不是将其作为参数提供:
public override string DisplayName
{
get
{
var culture = Thread.CurrentThread.CurrentUICulture;
var displayName = db.sp_getValueFromDatabase(id, culture.Name).firstOrDefault();
}
}
由于我不能接受评论作为公认的答案,我已经做出了自己的答案。如果上述评论者之一可以将他们的解决方案作为答案发布,我将回答他们的答案。