6

Nach dem documentation:ASP.NET Kern DisplayAttribute Lokalisierung

The runtime doesn’t look up localized strings for non-validation attributes. In the code above, “Email” (from [Display(Name = "Email")]) will not be localized.

Ich bin auf der Suche nach einer Möglichkeit, Text in DisplayAttribute zu lokalisieren. Irgendwelche Vorschläge, um es richtig zu machen?

Antwort

5

Sie können die auf die DisplayAttribute setzen, die verwendet werden kann, um Ihren Text zu lokalisieren.

Fügen Sie eine Ressource .resx Datei zu Ihrem Projekt hinzu, z. MyResources.resx und eine Ressource für Ihr Feld hinzufügen:

enter image description here

Dann DisplayAttribute

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

Die lokalisierte Ressource durch automatisch eingezogen wird in Ihren den Namen des Feldes und den MyResources Typen verweisen (siehe das Textfeld)

Hinweis: Es gibt zur Zeit ein Fehler in RC2, die ein NotImplementedException werfen, wenn Sie nicht-lateinische Zeichen in Ihren Ressource-Werten verwenden: https://github.com/aspnet/Razor/issues/760

+1

Es scheint, dass nicht-Validierung Attribute sind nicht lokalisiert nach diesem neuen asp.net Kernlokalisierungsmechanismus zu finden. Denkst du, dass es möglich ist, es auch für Nichtvalidierungsattribute zu implementieren, oder gibt es einen Grund dafür, dass mvc-Typen Nichtvalidierungsattribute übersprungen haben? – David

+0

Ich stimme zu, es ist ein bisschen seltsam! Ich nehme an, dass es einen Grund geben muss, warum sie sich entschieden haben, aber ich bin mir nicht ganz sicher. Du könntest immer auf GitHub fragen und sehen, was sie sagen. – Sock

+1

Ich bekomme 'Der Typ oder Namespace 'MyResources' konnte nicht gefunden werden. Was vermisse ich? – Lucius

1

Ich habe gerade ein Projekt, das für die Klasse Lokalisierung einschließlich Lokalisierung von Anzeigeattribut zeigt, Eigenschaften sowie Enums.

Das Projekt kann hier hat https://github.com/feradz/ASPNetCoreLocalization/wiki

Das Display-Attribut gefunden werden lokalisiert werden unter Verwendung des Ansatzes vor der ASP.NET-Core 1.0. Sehen Sie sich die Datei DataAnnotations.resx im Projekt an.

Die Name Eigenschaft von Display darf keine Leerzeichen und Sonderzeichen enthalten.

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

ResourceType sollte der vollständig qualifizierten Klassennamen Ressource (d.h. einschließlich der Namensraum).

2

Tatsächlich fand ich eine einfache Lösung für die Anhänger. Der Anzeigename wird meistens in der Beschriftung eines Eingabefeldes verwendet. So tun Sie dies, wenn Sie mögen:

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

natürlich können Sie den Namen der Eigenschaft von @Html.DisplayNameFor passieren, aber die meiste Zeit, dieses bereits gut funktioniert.

2

Einen zentralen Ort für alle Ihre Lokalisierung, ob in Sicht oder Datenannotationen zu haben, ist der beste Ansatz, den ich mir vorstellen kann, und dies, wie ich arbeiten konnte. In Startup.cs Datei, nachdem Sie nuget Pakete für die Lokalisierung Fügen Sie den folgenden Code

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

diese Weise wird die DataAnnotationLocalizerProvider wird von den Ressourcen sein. {} Kultur installiert.rex - (Die Ressourcendatei muss einen Zugriffsmodifikator von Kein Code gen haben) - vorausgesetzt, dass keine Ressourcen für die Standardsprache benötigt werden und auf die Ressourcendatei zugreifen können, da kein Code generiert und die Klasse leer ist mit dem gleichen Namen muss erstellt werden.

und in _ViewImports.cshtml Datei injizieren die folgende

@inject IHtmlLocalizer<Resources> Localizer 

indem Sie diese jetzt eine globale Variable Localizer in einem der Ansichten für die Lokalisierung Zwecke verwendet werden müssen.

This is how a Central Location for String Localization

Sie ungerade weitere Informationen über Globalization and localization in ASP.NET Core

Verwandte Themen