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
Reactive form tipizzati con FormBuilder in Angular
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Load test di ASP.NET Core con k6
Creare alias per tipi generici e tuple in C#
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Gestire domini wildcard in Azure Container Apps
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
Miglioramenti nell'accessibilità con Angular CDK
Filtrare e rimuovere gli elementi dalla cache del browser tramite le API JavaScript