resource net mvc asp asp.net-core asp.net-core-1.0 displayattribute asp.net-core-localization

mvc - ASP.NET Core DisplayAttribute Localization



net core localization (4)

De acuerdo con la documentación :

El tiempo de ejecución no busca cadenas localizadas para atributos que no sean de validación. En el código anterior, "Correo electrónico" (de [Pantalla (Nombre = "Correo electrónico")]) no se localizará.

Estoy buscando una forma de localizar el texto en DisplayAttribute. ¿Alguna sugerencia para hacerlo de manera apropiada?


Puede establecer ResourceType en DisplayAttribute que se puede usar para localizar su texto.

Agregue un archivo .resx recursos a su proyecto, por ejemplo MyResources.resx , y agregue un recurso para su campo:

Luego haga referencia al nombre del campo y al tipo MyResources en su DisplayAttribute

[Display(Name = "RememberMe", ResourceType = typeof(MyResources))] public bool RememberMe { get; set; }

El recurso localizado se pasará automáticamente (vea el cuadro de texto)

Nota : actualmente hay un error en RC2 que arrojará una NotImplementedException si utiliza caracteres no latinos en los valores de sus recursos: https://github.com/aspnet/Razor/issues/760


Acabo de crear un proyecto que demuestre la localización, incluida la localización del atributo Mostrar para las propiedades de la clase, así como las enumeraciones.

El proyecto se puede encontrar aquí https://github.com/feradz/ASPNetCoreLocalization/wiki

El atributo Mostrar debe ser localizado utilizando el enfoque anterior a ASP.NET Core 1.0. Eche un vistazo al archivo DataAnnotations.resx en el proyecto.

La propiedad Name de Display no puede contener espacios vacíos ni caracteres especiales.

[Display(Name = "NoSpacesAndSpecialChanractersHere", ResourceType = typeof(Resources.DataAnnotations))] public string FirstName { get; set; }

ResourceType debe ser el nombre de clase de recurso totalmente calificado (es decir, incluido el espacio de nombre).


En realidad, encontré una solución simple para los seguidores. El nombre para mostrar en la mayoría del tiempo se usa en la etiqueta de un campo de entrada. Así que haz esto si quieres:

<label asp-for="Email">@Localizer["Email"]</label>

por supuesto, puede pasar el nombre de la propiedad por @Html.DisplayNameFor , pero la mayoría de las veces, esta ya funciona bien.


Tener una ubicación central para toda su localización ya sea en vista o en anotaciones de datos es el mejor enfoque que se me ocurre, y así es como llegué a trabajar. En el archivo Startup.cs después de instalar los paquetes nuget para localización, agregue el siguiente código

services.AddMvc().AddViewLocalization().AddDataAnnotationsLocalization(options => options.DataAnnotationLocalizerProvider = (type, factory) => new StringLocalizer<Resources>(factory)); services.Configure<RequestLocalizationOptions>(options => { var cultures = new[] { new CultureInfo("en"), new CultureInfo("ar") }; options.DefaultRequestCulture = new RequestCulture("en", "en"); options.SupportedCultures = cultures; options.SupportedUICultures = cultures; });

De esta forma, el DataAnnotationLocalizerProvider será de los Recursos. {Culture} .rex - (El archivo de Recursos debe tener un modificador de acceso de No gen de código ) - asumiendo que no se necesitarán recursos para el idioma predeterminado, y para poder acceder al archivo de recursos ya que no se generará código y se creará una clase vacía con el mismo nombre.

y en el archivo _ViewImports.cshtml , inyecte lo siguiente

@inject IHtmlLocalizer<Resources> Localizer

al hacer esto, ahora tiene un Localizador de variable global para usar en cualquiera de las vistas con fines de localización.

Puede encontrar más información sobre Globalización y localización en ASP.NET Core