I am using blazor 3.1 in latest version of VS 2019.
So far, I am able to localize page labels (title, table fields etc.).
On the ListEmployee.razor
Here is my solution for localizing data annotation error messages. I create two resource files, one for fields and another one for error messages.
DisplayNameResource
for localizing fieldsErrorMessageResource
for localizing error messages
In view model class use Display
attribute for localizing field name. To specify resource file use ResourceType
property on Display
attribute:
[Display(Name = "Address", ResourceType = typeof(DisplayNameResource))]
And on validation attributes use ErrorMessageResourceName
and ErrorMessageResourceType
to specify resource file:
[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
Here is full example:
public class SomeViewModel
{
[Display(Name = "Address", ResourceType = typeof(DisplayNameResource))]
[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
[StringLength(256, ErrorMessageResourceName = "MaxLengthError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
public string Address { get; set; }
[Display(Name = "Phone", ResourceType = typeof(DisplayNameResource))]
[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
[RegularExpression("^09([0-9]{9})$", ErrorMessageResourceName = "PhoneLengthError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
public string Phone { get; set; }
[Display(Name = "Password", ResourceType = typeof(DisplayNameResource))]
[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
[StringLength(50, MinimumLength = 6, ErrorMessageResourceType = typeof(ErrorMessageResource), ErrorMessageResourceName = "MinxMaxLengthError")]
public string Password { get; set; }
[Display(Name = "ConfirmPassword", ResourceType = typeof(DisplayNameResource))]
[Required(ErrorMessageResourceName = "RequiredError", ErrorMessageResourceType = typeof(ErrorMessageResource))]
[StringLength(50, MinimumLength = 6, ErrorMessageResourceType = typeof(ErrorMessageResource), ErrorMessageResourceName = "MinxMaxLengthError")]
[Compare("Password", ErrorMessageResourceName = "PasswordConfirmMisMatch", ErrorMessageResourceType = typeof(ErrorMessageResource))]
public string ConfirmPassword { get; set; }
}
Error message for MaxLengthError
is {0} cannot be longer than {1} character
, so {0}
will be replaced with localized filed name and {1}
will be replaced with the 256
you specified on attribute [StringLength(256,...
This has been asked before:
How to add ViewModel localization to Blazor?
I suggested that using FluentValidation would be a better approach. Here is a link to my Github repo that demonstrates how it could work:
https://github.com/conficient/BlazorValidationLocalization
I did not tried this out!
In the offical docs of asp.net core there is section how to localize DataAnnotations
Maybe you find some clues there.