【问题标题】:MVC4 Localization with DisplayName in Database使用数据库中的 DisplayName 进行 MVC4 本地化
【发布时间】:2014-05-21 12:17:10
【问题描述】:

我有一个 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

我的问题是,我该怎么做?

【问题讨论】:

  • 您不能将Thread.CurrentThread.CurrentUICulture 作为属性的参数,因为它不是编译时值。为什么不在需要的地方立即使用Thread.CurrentThread.CurrentUICulture
  • 不能只获取 DisplayName 属性或构造函数中的 CultureInfo 吗?
  • 这个解决方案很明显,但我认为这行不通。但实际上它确实并且也使模型代码更清晰。谢谢!如果您可以将此作为答案提交,我会将其标记为已接受。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 localization


【解决方案1】:

这个问题的答案是由 Cmets 中第一名的 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();
   }
}

由于我不能接受 cmets 作为可接受的答案,我已经做出了自己的答案。如果上述评论者之一可以发布他们的解决方案作为答案,我会将他们的答案设为已接受的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多