Nello scorso script abbiamo visto come sfruttare Globalize e CLDR nella validazione client side di ASP.NET MVC 5. L'esempio che abbiamo fatto, però, soffre ancora di una lacuna: se inseriamo un valore non valido, infatti, il messaggio di errore mostrato è ancora quello standard in lingua inglese:

Se ispezioniamo l'HTML della pagina, infatti, notiamo subito che il messaggio di errore per l'obbligatorietà della data è correttamente tradotto in italiano, mentre quello relativo alla data non valida è invece ancora in inglese. Come mai questa differenza di comportamento?
<input class="..." data-val="true" data-val-date="The field Start must be a date." data-val-required="Il campo Start è obbligatorio." ... />
La ragione è molto semplice: nel primo caso, il messaggio proviene dall'attributo Required - implicitamente aggiunto visto che la data non è Nullable - che fa parte del .NET Framework e viene già installato con i file di risorse in lingua.
Il secondo messaggio, invece, viene generato da ClientDataTypeModelValidatorProvider, che è una classe interna di ASP.NET MVC, e quindi installata tramite package NuGet. In questo caso, il problema sta nel fatto che, per default, gli unici file di risorse che vengono installati sono quelli inglesi. Se ne abbiamo bisogno, però, possiamo scaricare da NuGet gli assembly con le varie localizzazioni. Per esempio, volendo supportare la lingua italiana, tutto ciò che dobbiamo fare è installare il seguente package:
Install-Package Microsoft.AspNet.Mvc.it
A questo punto, il messaggio di errore apparirà correttamente tradotto:

Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Le novità di .NET 7 e C# 11
Blazor PWA e Offline-First
Personalizzare le richieste con i rule set di Azure Front Door
Utilizzare il Service Bus Explorer integrato del portale Azure
Dependency Injection e custom validator in Blazor con .NET 7.0
Tracciare gli eventi tramite i DevTools di Chrome
Ottimizzare il codice JavaScript utilizzando WeakMap e WeakSet
Sottoscrizione agli eventi sul contenitore in JavaScript
Aggiungere le issue di più repository in una board in GitHub
Impostare il contenuto dell'head all'interno di ogni pagina Blazor
Bloccare una pull request che arriva da branch non definiti in GitHub
Raggruppare i parametri di una minimal API in un singolo oggetto in ASP.NET Core
I più letti di oggi
- Effettuare il download di un file via FTP con la libreria FluentFTP di .NET
- Sfruttare la local cache del browser tramite gli ETag in #aspnetcore https://aspit.co/cfc di @crad77 #webapi #aspnetmvc #blazor #cache
- Catturare la telemetria degli eventi di output cache in ASP.NET Core
- Taggare la output cache in base al routing in ASP.NET Core
- Effettuare l'upload di un file via FTP con la libreria FluentFTP di .NET