Localize Compare属性

时间:2013-11-19 00:41:45

标签: asp.net-mvc-4 localization attributes

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

El campo {0} y {1} campo no coinciden.

正确地将{0}部分替换为OldPassword的转换,但我不知道如何本地化指向NewPassword的指针。

所以回顾一下,我正在寻找替代方法     [比较(“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; }
}

2 个答案:

答案 0 :(得分:2)

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

http://aspnetwebstack.codeplex.com/workitem/1401

答案 1 :(得分:0)

我找到了解决这个问题的另一种方法。 我将所有翻译公开,构建动作="嵌入式资源"和自定义工具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; }

[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.

和波兰语


    MessagePaswdLen|{0} musi mieć co najmniej  {2} znaków.  
    MessageRequired|{0} jest wymagane