Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quasi ogni app di qualità di produzione deve usare le risorse. Una risorsa è qualsiasi dato non eseguibile distribuito logicamente con un'app. Una risorsa potrebbe essere visualizzata in un'app come messaggi di errore o come parte dell'interfaccia utente. Le risorse possono contenere dati in diversi moduli, tra cui stringhe, immagini e oggetti persistenti. Per scrivere oggetti persistenti in un file di risorse, gli oggetti devono essere serializzabili. L'archiviazione dei dati in un file di risorse consente di modificare i dati senza ricompilare l'intera app. Consente inoltre di archiviare i dati in un'unica posizione ed elimina la necessità di basarsi su dati hardcoded archiviati in più posizioni.
.NET offre supporto completo per la creazione e la localizzazione delle risorse. .NET supporta inoltre un modello semplice per la creazione di pacchetti e la distribuzione di risorse localizzate.
Creare e localizzare le risorse
In un'app non localizzata è possibile usare i file di risorse come repository per i dati dell'app, in particolare per le stringhe che altrimenti potrebbero essere hardcoded in più posizioni nel codice sorgente. In genere, si creano risorse come file di testo (.txt) o XML (.resx) e si usano Resgen.exe (Generatore di file di risorse) per compilarli in file binari .resources. Questi file possono quindi essere incorporati nel file eseguibile dell'app da un compilatore del linguaggio. Per altre informazioni sulla creazione di risorse, vedere Creare file di risorse.
È anche possibile localizzare le risorse dell'app per culture specifiche. In questo modo, puoi creare versioni delle tue app localizzate e tradotte. Quando si sviluppa un'app che utilizza risorse localizzate, si designa una cultura che funge da cultura neutrale o di fallback, le cui risorse vengono utilizzate se non ci sono risorse appropriate disponibili. In genere, le risorse della cultura neutrale vengono memorizzate nel file eseguibile dell'app. Le risorse rimanenti per le culture localizzate individuali vengono archiviate in assembly satellite indipendenti. Per ulteriori informazioni, vedere Creare assembly satellitari.
Impacchettare e distribuire le risorse
Le risorse dell'app localizzate vengono distribuite negli assembly satellite. Un assembly satellitare contiene le risorse di una singola cultura; non contiene codice applicativo. Nel modello di distribuzione degli assembly satellite, si crea un'app con un assembly predefinito (che di solito è l'assembly principale) e un assembly satellite per ogni cultura supportata dall'app. Poiché gli assembly satellite non fanno parte dell'assembly principale, è possibile sostituire o aggiornare facilmente le risorse che corrispondono a una cultura specifica senza sostituire l'assembly principale dell'app.
Determinare attentamente quali risorse costituiscono l'assembly di risorse predefinito dell'app. Poiché è parte dell'assembly principale, qualsiasi modifica a essa richiederà di sostituire l'assembly principale. Se non si specifica una risorsa predefinita, viene generata un'eccezione quando il processo di fallback della risorsa tenta di trovarlo. In un'app ben progettata, l'uso delle risorse non deve mai generare un'eccezione.
Per altre informazioni, vedere l'articolo Creazione di pacchetti e distribuzione di risorse .
Recuperare le risorse
In fase di esecuzione, un'app carica le risorse localizzate appropriate per ogni thread, in base alla cultura specificata dalla proprietà CultureInfo.CurrentUICulture. Questo valore della proprietà è derivato come segue:
Assegnando direttamente un CultureInfo oggetto che rappresenta la cultura localizzata alla Thread.CurrentUICulture proprietà.
Se una cultura non è assegnata esplicitamente, si recupera la cultura predefinita del thread dell'interfaccia utente dalla proprietà CultureInfo.DefaultThreadCurrentUICulture.
Se una cultura dell'interfaccia utente del thread predefinita non viene assegnata esplicitamente, viene recuperata la cultura per l'utente corrente sul computer locale. Le implementazioni .NET in esecuzione in Windows eseguono questa operazione chiamando la funzione Windows
GetUserDefaultUILanguage
.
Per ulteriori informazioni su come viene impostata la cultura dell'interfaccia utente corrente, vedere le pagine di riferimento CultureInfo e CultureInfo.CurrentUICulture.
È possibile quindi recuperare le risorse per la cultura corrente dell'interfaccia utente o per una cultura specifica utilizzando la classe System.Resources.ResourceManager. Anche se la ResourceManager classe viene usata più comunemente per il recupero delle risorse, lo System.Resources spazio dei nomi contiene tipi aggiuntivi che è possibile usare per recuperare le risorse. Questi includono:
La ResourceReader classe che consente di enumerare le risorse incorporate in un assembly o archiviate in un file binario autonomo con estensione .resources. È utile quando non si conoscono i nomi precisi delle risorse disponibili in fase di esecuzione.
La ResXResourceReader classe , che consente di recuperare le risorse da un file XML (con estensione resx).
La ResourceSet classe, che consente di recuperare le risorse di una cultura specifica senza applicare le regole di fallback. Le risorse possono essere archiviate in un assembly o in un file binario autonomo con estensione file .resources. È anche possibile sviluppare un'implementazione IResourceReader che consente di usare la ResourceSet classe per recuperare le risorse da un'altra origine.
Classe ResXResourceSet , che consente di recuperare tutti gli elementi in un file di risorse XML in memoria.