在这个问题的底部是一个包含三个属性的模型: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; }
}
答案 0 :(得分:2)
这看起来像MVC4和MVC5(我正在使用)中的已知错误。看起来它已在5.1中修复:
答案 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