1

Was ich versuchen sollte zu erreichen, ist eine einzige Ressource (Resx) Datei für jede unterstützte Sprache in net-core zu haben. Ich erkläre das Problem ein wenig.Einzelne Ressourcendatei für DataAnnotations Lokalisierung

Ich habe DataAnnotations auf jeder meiner Entitäten und ich muss die Nachrichten lokalisieren, die im Falle von Fehlern zurückgegeben werden. Es scheint, dass die Standardkonvention von net-core eine andere resx-Datei für jede unserer Entitäten haben muss.

Diese Datei wird entsprechend dem Namespace der Entität mit dem Kulturidentifizierer und den Resx-Erweiterungen benannt. Also, wenn ich ein Unternehmen namens Kunden innerhalb der Namespace Data.Entities, soll ich eine Datei Data.Entities.Customers.it.resx Namen hinzufügen und die Übersetzungen alle für die italienische Sprache in ihr. Also, wenn ich ein Attribut

StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string Name {get;set;} 

dann füge ich die richtige Übersetzung der Data.Entities.Customers.it.resx Datei.

Aber, wenn ich auf einem anderen entitity wie Lieferanten gehen bin ich gezwungen, eine andere Ressource-Datei Data.Entities.Suppliers.it.resx und natürlich

Ich habe
StringLength(50, ErrorMessage="The {0} should not be longer than {1} characters") 
public string SupplierName {get;set;} 

Jetzt genannt zu schreiben Ich muss die gleiche Übersetzung erneut in die richtige Datei für die Suppliers-Entität schreiben. Dies gilt auch für andere allgemeine Attribute wie [Erforderlich].

Also ich hoffe, mein Problem gut erklärt zu haben und meine Frage ist: Es gibt eine Möglichkeit, eine einzige Ressource Datei für alle meine Entitäten Validierungsnachrichten zu spezifizieren und dann ein einziges Mal die Nachrichten für die gemeinsamen Texte schreiben?

Antwort

1

Vom docs, können Sie den Rahmen erzählen eine gemeinsam genutzte Ressource für Ihre Daten Anmerkungen Lokalisierung zu verwenden:

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc() 
     .AddDataAnnotationsLocalization(options => { 
      options.DataAnnotationLocalizerProvider = (type, factory) => 
       factory.Create(typeof(SharedResource)); 
     }); 
} 

Im vorigen Code, SharedResource ist die Klasse, zu der resx entspricht, in dem Sie Ihre Prüfungsmeldungen sind gelagert. Bei diesem Ansatz verwendet DataAnnotations nur SharedResource und nicht die Ressource für jede Klasse.

+1

Autsch, ich habe dieses Dokument am Anfang gelesen (als ich andere Bedenken hatte) und jetzt ist mir das völlig entgangen. Lass mich ein bisschen versuchen – Steve

+0

Das war es. Vielen Dank. – Steve

Verwandte Themen