使用Resources在ASP.NET MVC4中本地化ViewModel

时间:2012-12-29 14:30:26

标签: localization asp.net-mvc-4

首先,我想澄清一下,我目前正在使用ASP.NET MVC的Model实体作为ViewModel,因为我的项目基于MVCVM,所以我不会简单地混淆两者。

无论如何,MVC会自动为ViewModel实体创建一些属性,如下所示(来自向导,本地化为意大利语)

public class LoginModel
{
    [Required]
    [Display(Name = "Nome utente")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Memorizza account")]
    public bool RememberMe { get; set; }
}

Display替换[Display(Name = LoginViewModelResources.lblUsername)]属性会导致编译错误:“参数必须是常量表达式,类型表达式或矩阵创建表达式”。简而言之,属性引用是禁止的。

Razor视图使用以下标记生成HTML

@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)

如何本地化ViewModel以便在前端显示正确的消息?

1 个答案:

答案 0 :(得分:8)

像这样:

[Required]
[Display(Name = "lblUsername", ResourceType = typeof(LoginViewModelResources))]
public string UserName { get; set; }

要使其正常工作,您必须使用LoginViewModelResources.resx定义Custom Tool=PublicResXFileCodeGenerator文件(在资源文件的属性中设置此项)并包含标签lblUsername,该标签将保留本地化资源