c# - asp net core 2中的DataAnnotations本地化
问题描述
我的代码:
启动.cs
public void ConfigureServices(IServiceCollection services)
{
...
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(SharedResource));
});
...
}
SharedResource.cs
namespace MyProj.Classes
{
/// <summary>
/// Dummy class to group shared resources
/// </summary>
public class SharedResource
{
}
}
FooViewModel.cs
public class FooViewModel
{
[Required(ErrorMessage = "EmailRequired")]
[EmailAddress(ErrorMessage = "EmailIsNotValid")]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
public string Email { get; set; }
}
FooPage.cshtml
...
<input asp-for="Email" class="form-control">
<div class="invalid-feedback" style="display:block;">
<span asp-validation-for="Email"></span>
</div>
...
我有资源文件 Resources\SharedResource.resx
电子邮件 电子邮件
EmailIsNotValid电子邮件字段不是有效的电子邮件地址。
EmailRequired 电子邮件字段是必需的。
不起作用,在编译或运行时没有错误。它显示的不是翻译,而是“EmailIsNotValid”或“EmailRequired”。会出什么问题?
解决方案
ASP.NET Core 2.0 中RequiredAttribute 的本地化重复但没有标记答案,它隐藏在评论中。
虚拟 SharedResource 类应与 Web 应用程序 (startup.cs) 位于同一命名空间中。就我而言,我删除了“.classes”。文档不清楚。
更新:对于与我相同的文件名规则的虚拟类适用于文档: https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1#resource-file-naming
资源以其类的完整类型名称减去程序集名称来命名。例如,一个项目中的法语资源,其主要程序集是 LocalizationWebsite.Web.Startup 类的 LocalizationWebsite.Web.dll 将被命名为 Startup.fr.resx。LocalizationWebsite.Web.Controllers.HomeController 类的资源将命名为 Controllers.HomeController.fr.resx。如果目标类的命名空间与程序集名称不同,则需要完整的类型名称。例如,在示例项目中,ExtraNamespace.Tools 类型的资源将命名为 ExtraNamespace.Tools.fr.resx。
另一种解决方法是将资源文件命名为“Classes.SharedResource.resx”或将其放在文件夹 Resources\Classes 中。
推荐阅读
- primefaces - HahsMap 和 primefces 视图
- python - 在任何列列表中查找具有所有字符串列表的数据框行
- listview - 为什么不推荐使用 ExpansionTile 页面?
- c# - 如何在 Windows.Storage.Streams.Buffer 中编辑数据
- javascript - jQuery 动画缩放不适用于 firefox 和 safari
- android - Android Studio 中的圆角和边框
- python - 循环中的多处理,“池未运行”错误
- javascript - 点击后更改链接名称和href
- c++ - 为什么有时我输入一个整数程序会将第一个输入的数字打印成十进制数?
- c# - 如何在 WPF C# 应用程序中禁用终止超时?