ASP Net Core 2中的DataAnnotations本地化

时间:2018-06-20 19:03:40

标签: c# asp.net-core localization data-annotations

我正在尝试实施此操作:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1#dataannotations-localization

我的代码:

Startup.cs

None

SharedResource.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));
    });
...
}

FooViewModel.cs

namespace MyProj.Classes
{
    /// <summary>
    /// Dummy class to group shared resources
    /// </summary>
    public class SharedResource
    {

    }
}

FooPage.cshtml

public class FooViewModel
{
    [Required(ErrorMessage = "EmailRequired")]
    [EmailAddress(ErrorMessage = "EmailIsNotValid")]
    [Display(Name = "Email")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
}

我有资源文件Resources \ SharedResource.resx

电子邮件电子邮件
EmailIsNotValid 电子邮件字段不是有效的电子邮件地址。
需要电子邮件:“电子邮件”字段为必填字段。

不起作用,在编译或运行时没有错误。它没有显示翻译,而是显示“ EmailIsNotValid”或“ EmailRequired”。怎么可能出问题了?

1 个答案:

答案 0 :(得分:1)

Localization of RequiredAttribute in ASP.NET Core 2.0的重复项,但是没有明显的答案,并且隐藏在注释中。

Dummy SharedResource类应与Web应用程序(startup.cs)位于同一命名空间中。就我而言,我删除了“ .classes”。文档不清楚。

更新: 对于虚拟类,如我的文件名规则适用于docs: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1#resource-file-naming

  

资源以其类的完整类型名称减去   程序集名称。例如,某项目中的法国资源   该类的程序集是LocalizationWebsite.Web.dll   LocalizationWebsite.Web.Startup将被命名为Startup.fr.resx。一种   课堂资源   LocalizationWebsite.Web.Controllers.HomeController将被命名为   Controllers.HomeController.fr.resx。如果目标类的名称空间   与程序集名称不同,您将需要完整的类型名称。   例如,在示例项目中,该类型的资源   ExtraNamespace.Tools将被命名为ExtraNamespace.Tools.fr.resx。

另一种解决方法是将资源文件命名为“ Classes.SharedResource.resx”或将其放在“ Resources \ Classes”文件夹中。