Nello script 1081 abbiamo affrontato la problematica della localizzazione di un sito ASP.NET, mostrando in particolare come la soluzione sia quella di sfruttare i file di risorse, compilati come Embedded Resource.
Il problema di questo approccio, però, è che questi file vengono inclusi all'interno dell'assembly e, pertanto, ogni modifica richiede una nuova compilazione. Soprattutto nel caso di applicazioni complesse, però, la traduzione dei testi viene affidata a individui terzi, magari non sviluppatori, e che tipicamente non hanno a disposizione Visual Studio. Per questa ragione, e anche per avere una certa flessibilità nella modifica, è preferibile effettuare il deploy dei singoli file .resx, che non sono altro che file XML e, pertanto, facilmente editabili anche con un tool quale Notepad.
Cosa dobbiamo cambiare nel nostro progetto per poter supportare questo scenario? Il primo passo è, intanto, quello di impostare la Build Action di questi file a Content, avendo cura anche di rimuovere il custom tool che si occupa della generazione automatica della corrispondente classe C#, visto che quest'ultima non sarà più utilizzabile.
Per accedere al contenuto dei file di risorse possiamo sfruttare il metodo GetGlobalResourceObject della classe HttpContext, ad esempio realizzando una classe simile alla seguente:
public static class Resoruces { public static string MyString { get { return GetValue("MyString"); } } private static string GetValue(string key) { return HttpContext.GetGlobalResourceObject("MyResourceFile", key) as string; } }
Con questo approccio, l'unica necessità in fase di deploy è quella di copiare i file di risorse (nel nostro esempio, MyResourceFile.resx, MyResourceFile.it-IT.resx, ecc.) all'interno della cartella App_GlobalResources.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottenere il contenuto di una cartella FTP con la libreria FluentFTP
Utilizzare la libreria Benchmark.NET per misurare le performance
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Load test di ASP.NET Core con k6
Limitare le richieste lato server con l'interactive routing di Blazor 8
Reactive form tipizzati con modellazione del FormBuilder in Angular
Sfruttare lo streaming di una chiamata Http da Blazor
Utilizzare Tailwind CSS all'interno di React: installazione
Gestire errori funzionali tramite exception in ASP.NET Core Web API
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Controllare gli accessi IP alle app con Azure Container Apps
Utilizzare gli snapshot con Azure File shares