SzenarioEnterprise Library Validation Application Block und Internationalisierung
Eine .NET/WPF Desktop-Anwendung sollte auf eine andere Sprache als Englisch lokalisiert (globalisierten oder in MS Begriffe) werden. Das heißt, die Benutzeroberfläche muss vollständig übernommen werden (Etiketten, Symbole, ...).
Protokolldateieinträge, Audit-Trail-Einträge und andere Ausgaben der Anwendung sollten jedoch in Englisch bleiben, damit der englischsprachige Service/das Support-Personal sie überprüfen kann. Sie sprechen kein Französisch oder Chinesisch.
Die Anwendung stützt sich auf RESX-Dateien für die Durchführung der Lokalisierung.
Der Enterprise Library Validation Block wird für die Validierung von Geschäftsregeln für das Objektmodell verwendet.
Angenommen, es gibt einen Dienst, der die angegebenen Argumente des Objektmodells validiert, bevor die echte Geschäftslogik ausgeführt wird. Unter bestimmten Umständen erhält es ungültige Objektmodellargumente, setzt die Ausführung jedoch mit bestem Aufwand fort. Die Bereitstellung ungültiger Objektmodelldaten sollte jedoch im Prüfprotokoll und in der Protokolldatei protokolliert werden.
Beispiel für einen Dienst, der den Validierungsblock verwendet.
public class Service : IService
{
public void MyMethod(MyObjectModelObject obj)
{
Validator validator = ValidationFactory.CreateValidator(typeof(MyObjectModelObject));
ValidationResults results = validator.Validate(this);
// !!! The messages in the validation results are now already localized to CurrentCulture.
// ... build a log message: msg
if (results.Count > 0)
{
Logger.Log(msg);
}
}
}
Wie im Code Kommentar angegeben, wenn Sie Validate() auf dem EnterpriseLibrary Validator aufgerufen haben, werden die Validierungsmeldungen bereits auf Französisch lokalisiert und Sie haben keine Chance, sie ein Beispiel zu schreiben Englische Protokolldatei
In anderen Bereichen unserer Anwendung verwenden wir eine Nachrichtenklasse, die die Ressourcen-ID und die Parameter kapselt, bis wir sicher sind, welche Kultur wir verwenden wollen, um den tatsächlichen Zeichenfolgenwert aufzulösen. Sie könnten es eine verzögerte Ressourcenauflösung nennen.
Haben Sie Ideen, wie Sie einen ähnlichen Mechanismus in den Enterprise Library Validation Block einführen können? Ideen so weit:
- Umschalten der Current vorübergehend (ich mag das nicht und es löst nur die Hälfte des Problems)
- Patch der Enterprise Library Validation-Block (ich weiß nicht, wie das auch)
Vielen Dank für Ihre Hilfe und Ihre Ideen!
Vielen Dank für Ihre Eingabe Tuzo! Der erwähnte Nachteil ist ein großer Nachteil für uns - wir brauchen definitiv dynamisch komponierte Nachrichten. Wir ändern derzeit die Implementierung des EntLib-Validierungsblocks so, dass sie vollständig mit unserer Nachrichtenklasse statt mit strikt aufgelösten Strings arbeitet. Eine ziemlich umständliche Aufgabe, aber am Ende haben wir einen einzigen Ansatz in unserer Anwendung. Ein großer Nachteil ist die Wartung, aber der Validierungsblock ist in den neuesten Versionen ziemlich stabil geblieben. –