Asp.net mvc 4 本地化比较属性

Asp.net mvc 4 本地化比较属性,asp.net-mvc-4,localization,attributes,Asp.net Mvc 4,Localization,Attributes,在这个问题的底部是一个包含三个属性的模型:OldPassword、NewPassword和ConfirmPassword。这些将以更改密码的形式显示。我已经本地化了所有错误消息,除了一条:当Compare属性失败时,我无法完全本地化错误消息。如您所见,我正在从资源文件中名为FieldMismatch的字符串读取错误消息。以下是西班牙语资源文件中的字符串: El campo {0} y {1} campo no coinciden. {0}部分正确地被替换为OldPassword的翻译,但我不知

在这个问题的底部是一个包含三个属性的模型:OldPassword、NewPassword和ConfirmPassword。这些将以更改密码的形式显示。我已经本地化了所有错误消息,除了一条:当Compare属性失败时,我无法完全本地化错误消息。如您所见,我正在从资源文件中名为FieldMismatch的字符串读取错误消息。以下是西班牙语资源文件中的字符串:

El campo {0} y {1} campo no coinciden.
{0}部分正确地被替换为OldPassword的翻译,但我不知道如何本地化指向NewPassword的指针

总而言之,我正在寻找一种替代方法 [比较(“新密码”。。。 具有 [比较(Resources.Culture.Account.Account.NewPassword

有人对实现这一目标的最佳方式有什么想法吗

public class LocalPasswordModel
{
    [Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
    [DataType(DataType.Password)]
    [Display(Name = "CurrentPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
    public string OldPassword { get; set; }

    [Required(ErrorMessageResourceName = "FieldIsRequired", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
    [StringLength(100, ErrorMessageResourceName = "NewPasswordLength", ErrorMessageResourceType = typeof(Resources.Culture.Account.Account), MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "NewPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "ConfirmPasswordLabel", ResourceType = typeof(Resources.Culture.Account.Account))]
    [Compare("NewPassword", ErrorMessageResourceName = "FieldMismatch", ErrorMessageResourceType = typeof(Resources.Culture.Home.Global))]
    public string ConfirmPassword { get; set; }
}

这看起来像是MVC4和MVC5(我正在使用)中的一个已知错误。它似乎已在5.1中修复:


我找到了解决这个问题的另一种方法。 我已经公开了所有翻译、build action=“Embedded Resource”和自定义工具PublicResXFileCodeGenerator。所有文件都放在${MySolution}/App_GlobalResources/translation*.resx文件中

[Required(ErrorMessageResourceType = typeof(App_GlobalResources.Translation), ErrorMessageResourceName = "MessageRequired")]
//[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[StringLength(100, ErrorMessageResourceType = typeof(App_GlobalResources.Translation), ErrorMessageResourceName = "MessagePaswdLen", MinimumLength = 6)]
[DataType(DataType.Password)]
//[Display(Name = "New password")]
[Display(ResourceType = typeof(App_GlobalResources.Translation), Name = "Password")]
public string NewPassword { get; set; }

英文翻译是这样的

MessageRequired|{0} is required MessagePaswdLen|The {0} must be at least {2} characters long. MessageRequired |{0}是必需的 MessagePaswdLen |{0}的长度必须至少为{2}个字符。 再擦亮一个

MessagePaswdLen|{0} musi mieć co najmniej {2} znaków. MessageRequired|{0} jest wymagane MessagePaswdLen{0}musi miećco najmniej{2}znaków。 MessageRequired |{0}jest wymagane
你真的只想将新密码输出到屏幕上吗?这违反了几个安全原则。不,他不是这么说的。有一个名为“FieldMismatch”的ErrorMessageResourceName,其中包含文本“字段{0}和{1}不匹配”。这应该显示为消息“旧密码和新密码字段不匹配”。