所有的校验信息都显示为“该值无效”,而不是实际的错误信息
我在ASP.NET项目中配置了本地化并启用了DataAnnotations的本地化。
builder.Services.AddControllersWithViews()
.AddDataAnnotationsLocalization();
builder.Services.AddRazorPages();
builder.Services.AddLocalization(options => options.ResourcesPath = "Resources");
// ...
app.UseRequestLocalization(options => options.SetDefaultCulture("sr"));
我创建了 DataAnnotations.resx 和 DataAnnotations.sr.resx 资源文件,在其中用我的语言(塞尔维亚语)编写了验证错误信息。

我把资源传递给DataAnnotations,在 RegisterViewModel:
public class RegisterViewModel
{
[DisplayName("email")]
[DataType(DataType.EmailAddress)]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[EmailAddress(ErrorMessageResourceName = "email_email", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string Email { get; set; }
[DisplayName("password1")]
[DataType(DataType.Password)]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string Password { get; set; }
[DisplayName("password2")]
[DataType(DataType.Password)]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[Compare("Password", ErrorMessageResourceName = "password2_confirmed", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string Password2 { get; set; }
[DisplayName("phone")]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[Phone(ErrorMessageResourceName = "phone_phone", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string Phone { get; set; }
[DisplayName("firstName")]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[Alpha(ErrorMessageResourceName = "field_alpha", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string FirstName { get; set; }
[DisplayName("lastName")]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[Alpha(ErrorMessageResourceName = "field_alpha", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public string LastName { get; set; }
[DisplayName("birthDate")]
[DataType(DataType.Date)]
[Required(ErrorMessageResourceName = "field_required", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
[Adult(ErrorMessageResourceName = "birthDate_adult", ErrorMessageResourceType = typeof(Resources.DataAnnotations))]
public DateOnly BirthDate { get; set; }
}
不知怎的,页面上所有的验证信息都显示为 The value '' is invalid.,而不是塞尔维亚语的那些。我在实现上缺少什么?

解决方案
目前你通过 app.UseRequestLocalization(options => options.SetDefaultCulture("sr")) 设置默认语言环境的方式,可能导致受支持的语言环境和UI语言环境没有正确配置。
相反,使用 RequestLocalizationOptions 配置默认语言环境、受支持的语言环境以及受支持的UI语言环境,并使用提供者来根据查询字符串、Cookie、Accept-Language请求头等识别所选语言环境。
并通过 app.UseRequestLocalization() 初始化配置好的 RequestLocalizationOptions 对象。
用于注册服务与中间件管道的Program.cs应如下所示:
CultureInfo[] supportedCultures = new[]
{
new CultureInfo("sr"),
new CultureInfo("en"),
// Other supported cultures
};
// Configure `RequestLocalizationOptions`
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("sr");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
// Optional
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new CookieRequestCultureProvider()
};
});
...
// Initialize `RequestLocalizationOptions` object
app.UseRequestLocalization();
app.UseRouting();
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。