ScenarioEnterprise Library Validation Application Block e Internazionalizzazione
un'applicazione desktop .NET/WPF dovrebbe essere localizzato (o in termini MS globalizzato) ad una lingua diversa da quella inglese. Cioè, l'interfaccia utente deve essere completamente adottata (etichette, icone, ...).
Le voci del file di registro, le voci della traccia di controllo e altri output dell'applicazione, tuttavia, devono rimanere in inglese per consentire al personale di assistenza/supporto di lingua inglese di esaminarlo. Non parlano francese o cinese.
L'applicazione si basa su file RESX per realizzare la localizzazione.
Il blocco di convalida della libreria aziendale viene utilizzato per la convalida delle regole aziendali sul modello a oggetti.
Supponiamo ora che esista un servizio che convalida gli argomenti del modello oggetto specificato prima dell'esecuzione della reale logica aziendale. In alcune circostanze riceve argomenti modello oggetto non validi, ma continua l'esecuzione con il massimo sforzo. La fornitura di dati del modello di oggetto non valido, tuttavia, deve essere registrata nella traccia di controllo e nel file di registro.
Esempio di un servizio che utilizza il blocco di convalida.
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);
}
}
}
Come indicato nel codice commento, quando hai chiamato validate() sul validatore EnterpriseLibrary, i messaggi di validazione sono già localizzato a Francese e non hai la possibilità di scriverli ad un esempio File di registro inglese.
In altre aree della nostra applicazione usiamo una classe di messaggio che incapsula l'id della risorsa e i parametri fino a quando non siamo certi di quale cultura vogliamo utilizzare la risoluzione del valore di stringa effettivo. Potresti chiamarlo una risoluzione di risorsa differita.
Qualche idea su come introdurre un meccanismo simile al blocco di convalida della libreria aziendale? Idee finora:
- commutazione della CurrentCulture temporaneamente (non mi piace quello e si risolve solo metà del problema)
- Patch l'Enterprise Library Validation Block (non mi piace anche quello)
Grazie per il vostro aiuto e idee condivise!
Grazie mille per il tuo contributo Tuzo! Lo svantaggio menzionato è un grosso svantaggio per noi: abbiamo sicuramente bisogno di messaggi composti dinamicamente. Al momento stiamo modificando l'implementazione del blocco di convalida EntLib per funzionare completamente con la nostra classe di messaggi anziché con stringhe risolte in modo avido. Un compito piuttosto ingombrante ma alla fine abbiamo un unico approccio in tutta la nostra applicazione. Il lato negativo è la manutenzione, ma il blocco di validazione è rimasto piuttosto stabile nei suoi concetti chiave nelle ultime versioni. –